3.1 类和结构
值类型:(char、int和float)、枚举类型和结构
引用类型包括类(class)类型、接口类型、委托类型和数组类型
值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存
储对象应用。
类和结构实际上都是创建对象的模板。结构在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问的方式和一些特征(如结构不支持继承)与类不同,但是语法上,结构与类非常相似,主要区别是使用关键字struct代替class
3.2 类成员
3.2.1 数据成员
数据成员包含了类的数据——字段、常量和事件
3.2.2 函数成员
l 方法:方法是与某个类相关的函数,它们可以是实例方法,也可以是静态方法。
(1) 方法的声明:[modifiers] return_type MethodName([Parameters])
(2) 参数可以通过引用类型或值类型传递给方法
(3) Ref参数:可以用ref关键字迫使值参数通过引用传送给方法。但是必须对传递给方法的参数进行初始化
(4) Out参数:作用与ref关键字一样,不需要对传递给方法的参数进行初始化
(5) 方法的重载:方法的几个不同签名(名称、参数个数、参数类型)的版本,为了重载方法,只需声明同名但参数个数或类型不同的方法
注:两个方法不能仅在返回类型上区别
两个方法不能仅根据参数是声明为ref还是out来区分
l 属性:是可以在客户机上访问的函数组。其访问方式与访问类的公共字段类似
l 构造函数:没有必要给类提供构造函数。一般情况下,如果没有提供任何构造函数,编译器会在后台创建一个默认的构造函数。它只能把所有的成员字段初始化为标准的默认值。
(1) 如果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数,只有在没有定义任何构造函数时,编译器才会自动提供默认的构造函数。
(2) 可以使用this关键字区分成员字段和同名的参数
(3) 构造函数的名字必须与类同名;构造函数没有返回类型,它可以带参数,也可以不带参数
(4) 构造函数可以重载,从而提供初始化类对象的不同方法
(5) 静态构造函数,用Static修饰,用修饰静态字段和属性。一个类只允许有一个静态构造函数,在类实例化时加载,这时修饰符Public、Private失去作用
(6) 可以使用修饰符(Public、Private、Protected)
(7) 应用父类构造函数时用():base()方法,引用自身重载的构造函数使用():this()
class StructAndClass
{
public static void Main(string[] args)
{
MyChildClass myobj1 = new MyChildClass();
Console.WriteLine();
MyChildClass myobj2 = new MyChildClass(4);
Console.WriteLine();
MyChildClass myobj3 = new MyChildClass(5, 7);
Console.ReadLine();
}
}
class MyParentsClass
{
public MyParentsClass()
{
Console.WriteLine("In MyParentsClass()");
}
public MyParentsClass(int i)
{
Console.WriteLine("In MyParentsClass(int {0})",i);
}
}
class MyChildClass : MyParentsClass
{
public MyChildClass()
{
Console.WriteLine("In MyChildClass()");
}
public MyChildClass(int i):base(i)
{
Console.WriteLine("In MyChildClass(int {0})",i);
}
public MyChildClass(int i, int y)
: base(i)
{
Console.WriteLine("In MyChildClass(int {0},int {1}):base({0})",i,y);
}
}
输出:
In MyParentsClass()
In MyChildClass()
In MyParentsClass(int 4)
In MyChildClass(int 4)
In MyParentsClass(int 5)
In MyChildClass(int 5,int 7):base(5)