class Child
{
private int age; //age用来存储孩子对象的年龄
private string name; //name当然是用来存储孩子的名字的
//Default constructor:
public Child()
{
name = "N/A";
}
// Constructor:
public Child(string name, int age)
{
this.name = name; //这是个构造函数,把孩子的名字用name命名,这个可能会比较容易搞混,this.name指的是上面private的那个name,而“=”右边的name 值得是public Child(string name, int age)的参数name,加上this就是为了区别这两个不同的name
this.age = age;
}
// Printing method:
public void PrintChild() //这个方法是输出孩子的姓名和年龄
{
Console.WriteLine("{0}, {1} years old.", name, age);//方法就是函数,同一个意思
}
}
class StringTest
{
static void Main()
{
// Create objects by using the new operator:
Child child1 = new Child("Craig", 11); //这是在创建对象,这么创建取决于你上面写的那个构造函数,这里用的是 public Child(string name, int age)这个构造函数
Child child2 = new Child("Sally", 10);
首先说一下构造器:
构造器允许将类型实例初始化为有效状态的特殊方法,也就是构造器有什么,实例为该构造器的时候就需要传递和构造器里面一样类型的参数进去。
构造器的声明方法:
一般是public 构造器名(){}构造器名和类名一致,参数可有可无,没有返回值,也不用void关键字。
每一个类在创建的时候都默认一个构造器,比如你声明一个类,类里面什么也没有。并在主函数里面,创建了该类的实例如:A a=new A()其实是调用了类A的默认构造器。
而且你只是实例化类的时候就接调用构造器里面的内容。如:
namespace ConsoleApplication46
{
class A
{
public A()
{
Console.WriteLine("ss");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
Console.ReadLine();
}
}
}
当你在类里面写出构造器的时候,之前那个默认的会自动消除。
构造器允许重载,和方法重载一样,参数不同就可以了,
public Child()
{
name = "N/A";
}
// Constructor:
public Child(string name, int age)
{
this.name = name; //this是类里面一个隐含的指针,当这个类被实例化的时候,它会把对象的地址传递给this。即this是类实例化所产生的对象
this.age = age;
}
你这里就是两个重载的版本,一个有参数,一个没有参数
下面的Mian函数的一段
Child child2 = new Child("Sally", 10);
child2就相当于
public Child(string name, int age)
{
this.name = name;
this.age = age;
}
里面的this。
当child2,调用类的成员变量的时候就通过this来调用,即this.name,后面的name为传递进来的参数,this.name = name; 等同于child2.name/*成员变量*/=name/*传递进来的参数*/
当然,如果成员变量名和参数名不同就可以不用关键字this了,this起的是一个区分作用,实际当中避免使用相同的变量名。
在C#里面调用类里面的成员变量可以不用初始化,因为在调用的时候会自动给他赋值(这里要注意局部变量可不行),即这个构造器
public Child()
{
name = "N/A";//这里面只对name初始化,没有对age'初始化
}
和这个实例
Child child3 = new Child(); //Child(); 里面没有任何参数那么调用的将是public Child()这个无参构造器
但是打印出了 :Child #3: N/A, 0 years old.//也就是对i进行了初始化,
public void PrintChild() //这里的方法作用是打印姓名和年龄
{
Console.WriteLine("{0}, {1} years old.", name, age);//方法和函数,你想一下Mian我们又叫它入口函数,它的什么方式和方法的声明方式一样。
}
一般定义类需要定义字段的时候都是私有字段,保护作用。那些私有字段也是成员变量,在类Chid里面有年龄和姓名所以需要age和name
Child的成员变量声明出来就是要被实现的,所以在主函数里面也需要实现,用于主函数调用
class Child
{
private int age; //字段是用来存储信息的也就是你要输入
的信息。私有是指它的访问属性,访问
属性有public ,private,internal,proteced 。 字段表明为private指的是该字段只能被所属类(指属于的那个类)中的成员访问。
private string name;
//Default constructor:
public Child()
{
name = "N/A";
}
// Constructor:
public Child(string name, int age)
{
this.name = name; //"this表示创建的实例,加this来区分两个name,thi.name表示你创建实例的字段。name是传入的参数。
this.age = age; //同上面的一样
}
// Printing method:
public void PrintChild() //输出字段的值,也就是你在创建实例时输入的值。
{
Console.WriteLine("{0}, {1} years old.", name, age); }// 方法和函数只不过是称呼不同。
}
class StringTest
{
static void Main()
{
// Create objects by using the new operator:
Child child1 = new Child("Craig", 11); //这是创建对象(实例),创建对象的语法有几种,这是最常用的一种,new 后面再写构造函数,像new Child("Craig", 11),这里根据参数来决定调用那个构造函数,因为这里有两个参数,在新建对象时就会调用有两参数的构造函数。
Child child2 = new Child("Sally", 10);
// Create an object using the default constructor:
Child child3 = new Child(); 这里没有参数,就调用无参的构造函数。
// Display results:
Console.Write("Child #1: ");
child1.PrintChild();
Console.Write("Child #2: ");
child2.PrintChild();
Console.Write("Child #3: ");
child3.PrintChild();
}
}
/* Output:
Child #1: Craig, 11 years old.
Child #2: Sally, 10 years old.
Child #3: N/A, 0 years old.
*/
私有字段存放年龄和名字,私有是为了不让别人改动,只有Child类本身可以改。当然用反射除外。
后面的name是形参,表示构造Child时传入的参数,如tom或者jim等。this.name=name表示将Child类的name字段初始化成传入的参数。如果没有this,就不能区分name到底是私有字段还是参数了。this表示新创建的对象本身。
PrintChild是公有方法,用来输出这个小孩。因为小孩的名字和年龄都是私有的,外界不能直接访问,只有通过公有方法才能显示小孩信息。
是的,这是在创建对象。语法上就是这么创建,
类 对象名 = new 类(参数)
首先创建了一个11岁的,然后创了个10岁的