今天学习了类的继承关键字的介绍。
因为很多知识点,但是也算拓宽了知识面,基础更扎实了。
在类的继承中,对调用父类的构造函数,以及类自身构造函数调用另一个构造函数用this关键字
方法参数中的ref和out修饰符的使用也搞懂了,使用这两个修饰符后就不是传值,而是传地址
已编译的变量和已边缘的属性语义上是不同的。如果再后来的版本中,把字段切换成属性,那么任何访问第一个版本中该字段的程序集都必须重新编译以使用属性。
静态属性当从类的外部访问时,必须使用类名引用,而不是实例名。
构造函数不能返回值
默认构造函数特征
默认构造函数特征:
1.不带参数
2.方法体为空
类只能有一个静态构造函数,而且不能带参数
通常,静态构造函数初始化类的静态字段
不能从程序中显式调用静态函数,被系统自动调用
1.在类的任何实例被创建之前
2.在类的任何静态成员被引用之前
析构函数只对类的实例起作用,因此没有静态析构函数
在程序不再访问该实例之后的某一时间点调用析构函数
字段可以用readonly修饰符声明。其作用类似于const,一旦值被设定就不能改变
const字段的值必须在编译期间决定,而readonly字段的值可以在运行期间决定。这种增加的自由性的自由性允许你在不同的构造函数中设置不同的值
和const不同,const总是像静态的,而readonly:
1.可以是实例字段,也可以是静态字段
2.在内存中的存储位置
this关键字在类中使用,是对当前实例的引用
因为静态成员不是实例的一部分,所以不能在任何静态函数成员的代码中使用this关键字
派生类要访问被隐藏的继承成员,可以使用基类访问表达式访问
base.field
不能override 静态方法或非虚方法
派生类构造函数执行:
1.初始化实例成员
2.调用基类构造函数
2、执行实例构造函数的方法
有两种形式的构造函数初始化语句:
1.使用关键字base并指明使用那一个基类构造函数
2.使用关键字this并指明应该使用当前类的哪一个另外的构造函数
protected internal 的成员对所有继承该类的类以及所有的程序集的内部类可见。是protected 和internal的联合
抽象成员是被设计来被覆写的函数成员
抽象成员只能被声明在抽象类中
virtual 能被覆写有代码体
abstract 必须被覆写,无代码
抽象类只能被用作其他类的基类,抽象类就是被设计出来继承的。
不能创建抽象类的实例
密封类与抽象类相反;
1.密封类只能被用作独立的类,不能被用作基类
2.用sealed作修饰符
静态类:
1.类的所有成员必须是静态的
2.类可以有一个静态的构造函数,但没有实例构造函数,不鞥呢创建该类的实例
3.不能继承静态类,它们是密封的
继承的语法将父类的所有东西都包含进来,除了构造函数。
私有的也包含进来,只是外界不能访问
里氏转换:
1.子类可以直接赋值给父类
2.如果父类指向的是子类对象,该父类可以直接强制类型转换为对应子类
is 是专门用来判断类型转换的语法
ref必须赋值后使用,用于传入参数
out可以直接使用,用于传出,必须在方法中赋值
string.isnullorempty()
base.gettype()
typeof()运算符
try代码中一旦异常,其后代码不再执行
即使try中有return,finally中也有执行
finally中不能有return
静态方法的使用情况:
1.不需要多个,只要一个
2.频繁使用
在第一次使用类的时候,静态构造函数被调用(仅一次)
静态资源只有在程序结束后才会释放
命名空间建议使用公司各开始命名,
在公司名之后跟着技术名称
隐藏基类方法
1.子类方法与基类方法同名
2.写new与不写new结果一样
抽象方法使用;
1.父类的方法可能永远也用不到,没有必要写出来
2.父类的概念太抽象,有些方法没有办法实现,就不需要写出来,由于有这些极端,因此有时方法没有方法体(比如动物基类中输出腿的数量这种方法没有办法实现)
因为很多知识点,但是也算拓宽了知识面,基础更扎实了。
在类的继承中,对调用父类的构造函数,以及类自身构造函数调用另一个构造函数用this关键字
方法参数中的ref和out修饰符的使用也搞懂了,使用这两个修饰符后就不是传值,而是传地址
已编译的变量和已边缘的属性语义上是不同的。如果再后来的版本中,把字段切换成属性,那么任何访问第一个版本中该字段的程序集都必须重新编译以使用属性。
静态属性当从类的外部访问时,必须使用类名引用,而不是实例名。
构造函数不能返回值
默认构造函数特征
默认构造函数特征:
1.不带参数
2.方法体为空
类只能有一个静态构造函数,而且不能带参数
通常,静态构造函数初始化类的静态字段
不能从程序中显式调用静态函数,被系统自动调用
1.在类的任何实例被创建之前
2.在类的任何静态成员被引用之前
析构函数只对类的实例起作用,因此没有静态析构函数
在程序不再访问该实例之后的某一时间点调用析构函数
字段可以用readonly修饰符声明。其作用类似于const,一旦值被设定就不能改变
const字段的值必须在编译期间决定,而readonly字段的值可以在运行期间决定。这种增加的自由性的自由性允许你在不同的构造函数中设置不同的值
和const不同,const总是像静态的,而readonly:
1.可以是实例字段,也可以是静态字段
2.在内存中的存储位置
this关键字在类中使用,是对当前实例的引用
因为静态成员不是实例的一部分,所以不能在任何静态函数成员的代码中使用this关键字
派生类要访问被隐藏的继承成员,可以使用基类访问表达式访问
base.field
不能override 静态方法或非虚方法
派生类构造函数执行:
1.初始化实例成员
2.调用基类构造函数
2、执行实例构造函数的方法
有两种形式的构造函数初始化语句:
1.使用关键字base并指明使用那一个基类构造函数
2.使用关键字this并指明应该使用当前类的哪一个另外的构造函数
protected internal 的成员对所有继承该类的类以及所有的程序集的内部类可见。是protected 和internal的联合
抽象成员是被设计来被覆写的函数成员
抽象成员只能被声明在抽象类中
virtual 能被覆写有代码体
abstract 必须被覆写,无代码
抽象类只能被用作其他类的基类,抽象类就是被设计出来继承的。
不能创建抽象类的实例
密封类与抽象类相反;
1.密封类只能被用作独立的类,不能被用作基类
2.用sealed作修饰符
静态类:
1.类的所有成员必须是静态的
2.类可以有一个静态的构造函数,但没有实例构造函数,不鞥呢创建该类的实例
3.不能继承静态类,它们是密封的
继承的语法将父类的所有东西都包含进来,除了构造函数。
私有的也包含进来,只是外界不能访问
里氏转换:
1.子类可以直接赋值给父类
2.如果父类指向的是子类对象,该父类可以直接强制类型转换为对应子类
is 是专门用来判断类型转换的语法
ref必须赋值后使用,用于传入参数
out可以直接使用,用于传出,必须在方法中赋值
string.isnullorempty()
base.gettype()
typeof()运算符
try代码中一旦异常,其后代码不再执行
即使try中有return,finally中也有执行
finally中不能有return
静态方法的使用情况:
1.不需要多个,只要一个
2.频繁使用
在第一次使用类的时候,静态构造函数被调用(仅一次)
静态资源只有在程序结束后才会释放
命名空间建议使用公司各开始命名,
在公司名之后跟着技术名称
隐藏基类方法
1.子类方法与基类方法同名
2.写new与不写new结果一样
抽象方法使用;
1.父类的方法可能永远也用不到,没有必要写出来
2.父类的概念太抽象,有些方法没有办法实现,就不需要写出来,由于有这些极端,因此有时方法没有方法体(比如动物基类中输出腿的数量这种方法没有办法实现)