虚方法使用virtual进行申明, 子类重写父类的虚方法, 则在调用时会直接调用子类重写的方法。
面向对象: 单继承多实现
虚方法使用virtual进行申明, 子类重写父类的虚方法, 则在调用时会直接调用子类重写的方法。
面向对象: 单继承多实现
new 关键字申明的方法属于隐藏方法, 父类申明的对象调用方法 则调用父类的, 子类申明的对象则调用子类的。
override重写方法, 方法被重写后都只会调用子类的方法。
运算符重载, 对象的运算符重载类似于java重载equals函数。
mfsdmffmlfmalasmd
接口可以继承接口,
实现了继承其他接口的接口时 必须实现继承的所有接口的方法。
类可以实现多个接口。
C# 的接口定义: 使用interface关键字进行修饰。
接口不包含数据成员。
接口的方法不能私有, 默认使用public进行修饰。
静态函数只能使用静态数据。也就是只能使用静态变量。
C# 中可以申明静态类
静态类中只能包含静态成员。
静态类不需要实例化对象。可以直接使用类进行调用。
静态类的使用场景:
1、 公共场景。
在10号项目中引用9号项目:
右键- 生成依赖项 - 选择项目引用- 选择需要引用的项目。
子类构造器调用父类构造器的语法:
子类构造器() : 父类构造器(父类中需要的参数) {}
抽象类使用 abstract 关键字进行修饰。 与java相同。
抽象类不能被实例化。可以包含普通函数和抽象函数。
类继承抽象类 必须实现抽象类中所有的抽象方法。
密封类和密封方法 使用sealed关键字进行修饰。
密封类不能被继承。 密封方法不能被重写。
如果方法要定义为密封方法时, 必须是重写之后的方法。
写隐藏方法的时候, 父类的方法不需要做任何改变。
子类进行重写时 是直接重写。然后在子类的修饰词加上new关键字。
隐藏方法在调用时必须使用子类申明的类型的对象。
隐藏方法在使用父类类型申明的对象调用时调用的是父类的方法。
子类重写父类的方法。
父类类型的对象 接收子类类型, java种的多态。
重写父类方法的两种形式:
1、 虚方法:
虚方法的使用场景: 子类需要重写父类已有的方法
定义: 父类的方法 使用 virtual关键字进行修饰, 子类重写的方法使用override 关键字进行重写。
在调用虚函数的时候会检查子类有没有重写该虚函数。
2、 隐藏方法:
C# 调用父类的成员变量使用base关键字
java使用super关键字
调用父类的函数也是如此。
this关键字和java中的this相同。 表示当前对象。
C# 的继承语法
子类:父类即可
java中的继承语法: 子类 extends 父类
java是单继承, 多实现,
C# 是单继承。
C# 的默认父类也是 Object
值传递和引用传递。
静态存储区: 存储一些静态字符串。
类似于jvm的区域划分。
程序的内存区域: 堆, 栈, 静态存储区。
堆空间比较大, 读取速度较慢。
栈空间比较小, 但是读取速度较快。
属性与成员变量不是相同的含义、
属性的使用与 公开的成员变量的使用相同,直接赋值 或直接取值
不是函数的调用方式
属性的set / get 块都可以单独设置访问权限。
属性相当于set / get函数的简写。
类的构造函数
类没有定义函数的时候, 系统会创建一个默认的构造函数。 这个默认的构造函数是无参的。
在我们定义一个构造函数的时候, 默认的构造函数就会被替代。
在重载构造函数的时候, 尽量保证类中有无参构造函数。