定义类成员

注意:
1)在类的成员定义中,字段,方法和属性如果是公共的,则命名规则使用PascalCasing形式命名,即名称第一个单词的首字母也大写,而不是使用camelCasing形式,例如:MyInt。
2)静态中的成员不属于任何对象,它可以通过类名直接访问,而实例成员必须通过对象来访问。
3)对象变量保存的仅仅是对象的一个引用,而不是对象本身
4)在设计类的时候,类的成员变量都应该设成private,以方便封装和隐藏,而不要让类的外部知道类中有哪些成员变量。
5)定义类的构造函数时,如果定义了带参数的构造函数,一定要加上不带函数的构造函数,因为自己定义了构造函数以后,系统就不会自己加上默认构造函数了,在定义类的对象时不带参数时就会出错。


1.定义字段
1)字段用标准的变量声明格式和(public、private、internal、protected)等修饰符来声明(可以进行初始化);
2)字段也可以用readonly关键字,表示这个字段只能在执行构造函数的过程中赋值,或者由初始化赋值语句赋值;
3)字段可以用static关键字声明为静态,此时静态字段将通过定义它们的类来访问,而非通过对象来访问;
4)字段也可以用const关键字来创建一个常量,此时const成员也是静态,但不能再用static关键字修饰。

2.字义方法
1)同字段,方法可以用static关键字声明,此时方法可以通过类来访问,而不是通过对象访问;
2) d 方法定义中,可以使用以下关键字
    virtual——方法可以重写;
    abstract——用于抽象类中,方法必须在非抽象的派生类中重写;
    override——方法重写了一个基类方法(重写方法时必须使用此关键字)
    extern——在项目外部提供方法的执行代码

3.定义属性
1)属性与字段类似,但它拥有两个类似函数的块儿,一个用于获取属性的值 ,一个用于设置属性的值 。这两个块儿称为访问器,分别用get和set关键字定义。这两个块儿也可以控制对属性  的访问级别,也可以通过忽略掉一个块儿来创建只读或只写属性(这仅适用于外部代码,因为类中的其他代码可以访问这些块能访问的数据)。
2)属性的基本结构为

public   int  MyIntProp
{
   get
   {
     // Property get code.
   }
   set
   {
    // Property set code.
   }
}

3)属性经常用于需要有很多的控制的时候,比如要使赋给属性的值在0~10之间,此时可用一个if语句来判断值的范围,如果使用了无效的值,则有以下4种选择:
      什么也不做;
      给字段赋默认值
      继续执行,但记录下该事件,以备将来分析(推荐)
      抛出异常。(推荐)
4)访问器的可访问性不能高于它所属的属性

5.隐藏基类方法
1)隐藏基类方法就是在派生类中有和基类一样的方法,基类中的方法可以是虚拟的,也可以不是虚拟的,在派生类中的此方法前面使用关键字new来显式说明这是编程者自己隐藏的(不是不小心隐藏的)
2)乍一看,隐藏基类方法和重写基类方法非常相似,但它们的区别却是很大的。基类方法被重写后,即使通过基类来调用此方法,结果也是调用的重写后的方法,而不是基类原来的方法,但是使用隐藏基类方法以后,对基类的方法调用的还是原来基类的方法,对派生类的方法调用的就是派生类中的方法。
3)如果要在派生类中使用基类中被重写的方法,则应该在调用方法前使用base关键字,例如:base.DoSomething();但是这种方法不能用于静态方法,因为base使用的是对象实例,,所以在静态成员中使用全产生错误。

6.this关键字
1)this关键字指当前的对象实例,可以用于类成员的内部,但不能在静态成员中使用this关键字(因为静态成员不是对象实例的一部分)
2)this关键字最常用的功能是把当前对象实例的一个引用传递给一个方法

几点总结:
1)类的成员变量表示对象的特征
2)方法表示对象可执行的操作
3)类中未定义构造函数,运行库会提供默认的构造函数,但类中定义了构造函数后,运行库将不会再添加默认构造函数,
4)构造函数可以重载,但析构函数不能重载,并且每一个类只能有一个析构函数
5)可以根据不同数量的参数或不同类型的参数对方法进行重载,但是不能根据返回值进行方法重载

你可能感兴趣的:(类)