抽象类使用 abstract 关键字进行修饰。 与java相同。
抽象类不能被实例化。可以包含普通函数和抽象函数。
类继承抽象类 必须实现抽象类中所有的抽象方法。
密封类和密封方法 使用sealed关键字进行修饰。
密封类不能被继承。 密封方法不能被重写。
如果方法要定义为密封方法时, 必须是重写之后的方法。
抽象类使用 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函数的简写。
类的构造函数
类没有定义函数的时候, 系统会创建一个默认的构造函数。 这个默认的构造函数是无参的。
在我们定义一个构造函数的时候, 默认的构造函数就会被替代。
在重载构造函数的时候, 尽量保证类中有无参构造函数。
C# 的set和get方法基本相同。
C# 的空指针异常与 java基本相同。
VS新建类:
右键项目- 添加- 新建项- 选择类, 在弹窗的最下面名称位置修改类的名称。
Math.Sqrt(); 求给定值的平方根。
private:私有的访问权限。
权限修饰符和java基本相同。
结构体不需要实例化, 也就是new
而类需要进行实例化再进行使用。
C#的类和java类的定义基本相同。
C#的异常处理和java基本相同
try{
} catch (捕获的异常类型) {
}
CLR:异常系统
继续执行是从当前断点执行到 下一个断点。
VS的debug方法与IDEA软件基本相同。
断点窗口可以禁用、删除断点。
程序中的错误: 语法错误(编译错误)
语义错误(可能导致运行时异常)
语义错误也可能导致代码逻辑错误, 结果与需求不一致。