类
1.字段、只读修饰符、字段初始化
2.方法、方法重载、值传递和引用传递
3.方法签名:方法签名在整个类中必须是唯一的。方法签名包括方法名、类型参数(返不包括参数名及返回值类型)。
4.类实例构造方法、重载构造方法(this)、隐式无参数构造方法、构造方法和字段初始化顺序
5.非公有构造方法:定义非公有构造方法的原因是为了在一个静态方法中控制类实例的创建。
6.对象初始化器
7.this引用:this引用指得是引用类实例自身。也用来避免字段和局部变量或属性相互混淆。This引用只对类内或结构体的非静态成员有效。
8.属性:只读属性(get)、自动属性、get、set访问权限、索引器
9.常量
10.静态构造方法:运行时在使用类之前自动调用静态构造方法,一下两种情况可以触发:1.实例化类2.访问类的静态成员
11.静态类:只有静态成员组成
12.局部类和方法:partial
13.继承
14.多态:引用是多态的 ,这意味着x类型的变量可以指向x的子类对象。
15.类型转换和引用转换:
引用类型可以被:
隐式向上转换为基类的引用
显示向下转换为子类的引用
向上转换总是成功的,向下转换只有在对象的类型符合要求时才能成功。
16.向上类型转换:
向上类型转换创建一个基类指向子类的引用。例如:
Stock s=new Stock();//子类
Asset a=s;//Asset 基类
向上转换以后,变量a还是指向s的Stock对象。被引用的对象本身不会被替换或改变。
public class Person
{
public string PersonName="PersonName";
private int PersonAge=10;
public virtual string Print()
{
return "PersonPrint";
}
}
public class Student:Person
{
public string StudentName="StudentName";
public override string Print()
{
return "StudentPrint";
}
}
Student stu = new Student();
Person person = stu;
Console.WriteLine(person.PersonName);
Console.WriteLine(person.StudentName); //错误
上面最后一行产生一个编译错误,因为变量person是Person类型的,虽然他指向的是Student类型的对象。如果要访问Student的字段,就必须先把Person向下转换为Student类型。
17.向下类型转换
向下类型转换创建一个子类指向基类的引用。
Student stu = new Student();
Person person = stu;//向上转换
Student stuNew = (Student)person;//向下转换
对于向上类型转换,只影响了引用,被引用的对象没有变化。而向下类型转换必须是显示转换。如果向下转换出错,会导致错误,这是一个运行时类型检查的例子。
18.as运算符:as运算符在向下类型转换出错时为变量赋值null;这个操作相当有用,接下来只要判空 就可以了。
19.Virtual虚函数成员:表示为virtual的函数可以被提供特定实现的子类重载。方法、属性、索引器、事件都可以被声明为virtual
20.抽象类和抽象成员
21.隐藏继承成员:基类和子类可以定义相同的成员,此时子类的成员会隐藏基类成员。
22.密封方法和类:sealed
23.base关键字
24.构造和继承:
(A)隐式调用基类无参数构造方法
如果子类中的构造方法省略base关键字,那么基类的无参数构造方法将被隐式调用,如果基类没有无参数构造方法,子类的构造函数中就必须使用base关键字。
(B)构造方法和字段初始化顺序
当对象被初始化时,初始化按一下顺序进行:
1.从子类到基类:
a.初始化字段
b.指定被调用基类的构造方法中的变量
2.从基类到子类:
a.构造方法体执行
25.重载和解析:
Object
26.object 装箱和拆箱
27.静态和运行时类型检查:c#在静态(编译时)和运行时都会进行类型检查。
在引用或者茶香操作的向下类型转换时,有CLR执行运行时类型检查,例如:
Object y=”5”; int z=(int)y;//运行时错误,向下类型转换失败
28.GetType() 和typeof运算符
29.toString()方法
30.Object所有成员:
public class Object
{
public Object();
public static bool Equals(Object objA, Object objB);
public static bool ReferenceEquals(Object objA, Object objB);
public virtual bool Equals(Object obj);
public virtual int GetHashCode();
public Type GetType();
public virtual string ToString();
protected Object MemberwiseClone();
}
结构体
31.结构体:结构体是值类型,而类是引用类型。结构体不支持继承(除了隐式派生自System.ValueType)