1,类只能进行单一继承,但是可以继承多个接口(interface)
2,接口可以继承多个接口
3,override 用于重写基类成员 但是需要与 virtual 配对使用
4,Tostring 是每个对象都有的方法,因为其来自 Object 是所有对象的基类,可重写。
5,abstract 使用该关键字修饰的成员,其派生类必须实现该成员 (成员使用了abstract 类也需使用abstract 修饰符)
6,sealed 由该关键字修饰的类不能作为基类即不可派生。也可以取消virtual 成员的虚含义
7,static
1)静态类 无法实例化,同时需要提供静态构造函数
2)静态方法 调用必须使用类名访问 不能使用实例进行访问
3)静态方法可以进行重载,但不能进行重写,因为它们属于类,而不属于类的任何实例
4)如果类包含静态字段,则提供在类加载时初始化它们的静态构造函数
5)静态函数中无法访问非静态成员,因为静态成员属于类,不属于任何实例,非静态成员会随实例的不同而不同。
9,非静态方法里面可以使用静态成员。
10,访问权限设置
11,set、get、init、value 属性的隐藏实现,set用于修改属性值,get用于获取属性值,init只在
对象构造的时候分配新值。value 是get、set访问器分配的值。
class TimePeriod
{
private double _seconds;
public double Hours
{
get { return _seconds / 3600; }
set {
if (value < 0 || value > 24)
throw new ArgumentOutOfRangeException(
$"{nameof(value)} must be between 0 and 24.");
_seconds = value * 3600;
}
}
private string _name;
public string Name // read-write instance property
{
get => _name;
set => _name = value;
}
}
注:
1)set、get、init可类似方法,set可修改,get可读。(可参考cocos的property)
2)可用 init
访问器代替 set
访问器将属性设为只读。
3)set、get、init可控制属性是读写、只读、只写
12,重载:相同的函数名,函数的形参不同,根据形参的个数,调用对应的函数
13,重写:使用 override 覆盖基类方法,重新实现。
14,构造函数:
1)在创建类的实例时,会自动调用改方法,并进行初始化一些成员。
2)可进行重载。
3)函数名必须与类名相同。
4)无参构造函数,编译器会自动提供
5)如果构造函数被声明为私有,则该类无法被实例化
6)基类构造函数可以使用base关键字调用,如下:
public class Manager : Employee
{
public Manager(int annualSalary)
: base(annualSalary)
{
//Add further instructions here.
}
}
注:1)如果基类没有提供无参数构造函数,派生类必须使用 base
显式调用基类构造函数
15,类的所有成员,如果没有使用修饰符进行修饰,默认是 private私有,包括构造函数
16,终结器即虚构函数 ~name(){}
1)无法在结构中定义终结器。 它们仅用于类。
2)一个类只能有一个终结器。
3)不能继承或重载终结器。
4)不能手动调用终结器。 可以自动调用它们。
5)终结器不使用修饰符或参数。
6)可进行重写
7)编译器会自动生成一个虚构函数
8)调用顺序 :子类虚构 =》父类虚构
17,在单条语句中实例化对象或集合 并进行成员赋值,如下:
public class Cat
{
// Auto-implemented properties.
public int Age;
public string Name { get; set; }
public Cat(){}
public Cat(string name)
{
this.Name = name;
}
}
//类测试
Cat cat = new Cat { Age = 10, Name = "hello" };
Cat sameCat = new Cat("Fluffy"){ Age = 10 };
Console.WriteLine($"{cat.Age}+ {cat.Name}");
Console.WriteLine($"{sameCat.Age}+ {sameCat.Name}");
//集合测试
int[] array2 = new int[] {0, 2, 4, 6, 8};
/**
output 10+ hello
output 10+ Fluffy
*/
18,partial 关键字 可以把一个、一个、一个或一个方法的定义到两个或更多的文件中,编译时会把所有部分组合起来。