一、类的成员:类中的数据和函数统称类的成员
1、字段 属性 方法 构造函数 析构函数 终结器 运算符 索引器
class Customer
{
private int name; //1字段
private int _sex;
public int set //2属性
{
get { return _sex; }
set { _sex = value; }
}
public Customer(int name)//3构造函数:与类同名 没有返回值 可以带参数
{
this.name = name;
}
~Customer() //3析构函数或终结器:1加~ 2主要用于非托管资源垃圾回收
{
}
public void Add(int count) //4方法
{
count++;
}
}
2、 字段和属性的区别
Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)。
struct persion
{
public int height;
priavte int age;
}
类是存储在托管堆(Heap)的引用类型,结构是存储在堆栈上(Stack)上的值类型
类是可以继承,而结构是不可以,唯一例外结构派生于Object类
三、C#访问修饰符
在C#中有关的访问修饰符主要有以下5种:private(私有的),protected(受保护的),internal (程序集内部的),public(公开的)以及protectde internal(只有本程序内或者继承于该类的类型可以访问)。
使用访问修饰符修饰的对象有:namespace(命名空间),class(类),struct(结构),enum(枚举),interface(接口),delegate(委托)以及他们的成员等等。下面进行逐一阐释。
1.namespace: 隐式具有public类别,不能为其显式添加任何访问修饰符。但作为namespace的成员职能具有public或者internal访问级别。
2.枚举成员: 同命名空间一样,只具有public访问级别,且不能枚举成员添加访问修饰符。
3.struct和class: 当仅包含在namespace中时,默认是internal级别,可以显示为其添加public,internal; 当被包含在一个类的内部的时候,可以是protected或者private修饰符。
4.delegate: 默认具有internal级别
5.interface: 与类不同,接口默认具有internal级别。接口也可声明为public或internal。
6.类的成员: 可以具有5种访问级别。默认为private.
7.结构的成员: 可以是public,private,internal访问级别。默认是private,因为结构是隐式封闭的。由于结构不具有继承关系,所以不能用protected或者protected internal去修饰结构成员。
8.接口的成员: 同枚举成员一样,具有public级别,但是不能为其显式添加public关键字。
四、Object 类
● ToString()方法:是快速获取对象的字符串表示的一种便捷方式。当只需要快速获取对象的内容,用于调试时就可以使用这个方法。在数据的格式化方面,它提供的选择非常少:例如,日期在原则上可以表示为许多不同的格式,但DateTime.ToString()没有在这方面提供任何选择。如果需要更专业的字符串表示,例如考虑用户的格式化配置或文化(区域),就应实现IFormattable接口
● GetHashTable()方法:如果对象放在名为映射(也称为散列表或字典)的数据结构中,就可以使用这个方法。处理这些结构的类使用该方法确定把对象放在结构的什么地方。如果希望把类用作字典的一个键,就需要重写GetHashTable()方法。
● Equals()(两个版本)和ReferenceEquals()方法:如果把3个用于比较对象相等性的不同方法组合起来,就说明.NET Framework在比较相等性方面有相当复杂的模式。这3个方法和比较运算符==在使用方式上有微妙的区别。而且,在重写带一个参数的虚拟Equals()方法时也有一些限制,如果选择这么做,就是因为System.Collections命名空间中的一些基类要调用该方法,并希望它以特定的方式执行。
● Finalize()方法:第7章将介绍这个方法,它最接近C++风格的析构函数,在引用对象被回收调用,以清理资源时。Finalize()方法的Object执行代码实际上什么也没有做,因而被垃圾收集器忽略。如果对象拥有对未托管资源的引用,则在该对象被删除时,就需要删除这些引用,此时一般要重写Finalize()。垃圾收集器不能直接重写该方法,因为它只负责托管的资源,只能使用用户提供的Finalize()。
● GetType()方法:这个方法返回从System.Type派生的类的一个实例。这个对象可以提供对象所属类的更多信息,包括基本类型、方法、属性等。System.Type还提供了.NET反射技术的入口。
● MemberwiseClone()方法:这是System.Object中惟一没有在本书的其他地方详细论述的方法。不需要讨论这个方法,因为它在概念上相当简单,只是复制对象,返回一个对副本的引用(对于值类型,就是一个装箱的引用)。注意,得到的副本是一个简单复制,即它复制了类中的所有值类型。如果类包含内嵌的引用,就只复制引用,而不复制引用的对象。这个方法是受保护的,所以不能用于复制外部的对象。该方法不是虚拟的,所以不能重写它的实现。