rambo

C#基础知识

1、字段(Field)

作为对象状态一部分的数据变量,字段根据名称和类型来区分。

2、属性(Property)

对于调用者,属性看起来像是字段。但是对于类型的实现者,属性看起来更像是一个方法。属性允许在访问值之前校验输入参数和对象状态。最后属性允许创建只读或只写的“字段”。

例:  User类中的m_name为“字段”,而Name则为“属性”,属性代码块中get与set,称为属性访问器。私有的字段m_name可以通过公开的属性Name对它进行读写操作。 通过“属性”读取“字段”值时,将触发get访问器;通过“属性”为“字段”赋值,将触发set访问器。

3、方法(Method)

4、事件(Event)

事件在对象以及其他对象之间实现了通知机制。

类型可见性规则:

  • private:成员只能由同一类类型中的其他成员访问。
  • family:成员可由派生类型访问,不管那些类型是否是在同一个程序集中。(C#和C++中用protected)
  • assembly:成员可由同一个程序集中的任何代码访问。用internal修饰符标识assembly
  • family or assembly:成员可由同一个程序集中的任何代码访问。成员可由同一个程序集中的任何类型访问。用protected internal修饰符标识family or assembly。

所有类型都是从System.Object派生的,每个类型的每个对象都保证了一组最基本的方法。

公共方法:

1、Equals 虚方法  如果两个对象有相同的值,返回true。

对象同一性(identity):this和obj实参引用同一个对象

实现Equals的几点:1)如果obj实参为null,就返回false。因为调用非静态Equals方法时,this所标识的当前对象显然不是null。2)如果this和obj实参引用同一个对象,就返回true。在比较包含大量字段的对象时,有助提升性能。3)如果this和obj实参引用不同类型的对象,就返回false。4)针对类型定义的每个实例字段,将this对象中的值与obj对象中的值进行比较。任何字段不想等,返回false。

2、GetHashCode
返回对象的值的哈希码。如果某个类型的对象要在哈希表集合(比如Dictionary)中作为键使用,类型应重写该方法。方法应该为不同对象提供良好分布。大多数类型永远不会在哈希表中作为键使用。
3、GetType
返回从Type派生的一个类型的实例,指出调用GetType的那个对象是什么类型。返回的Type对象可以和反射类配合,获取与对象的类型有关的原数据信息。GetType是非虚方法,目的是防止类重写该方法,隐瞒其类型,从而破坏类型安全性。