C#笔记[ 四 ]:抽象类,密封类,部分类
Evernote Export
.................................. C#的抽象类 ...................................
抽象类 -- abstract [ absi抓t] -- 虚方法:virtual [ ver求 ] -- 重写:override [ overraid ]:
|
作用
|
规定某些类都必须具有某种行为,可以定义一个父类,但是这种行为有各不相同,所以提出了 抽象类;它代表一类对象所具有的公共属性或公共方法
[要创建 马,鸟,狗类,规定都有吃东西这个方法,但是不同的动物有不同的吃法,所以写不了方法实体,只能定义为抽象方法]
|
|
抽象类
|
规定某些类都必须具有行为的模板,可以定义构造函数,但不能被实例化;可以有变量,实方法 和 虚方法
|
|
|
抽象属性,抽象方法只存在于抽象类中,但是抽象类中不一定有抽象成员
|
|
抽象方法abstract
|
没有方法体的方法,所以必须被重写;
|
|
虚方法virtual
|
标记可能,但不是必须被重写的方法,所以必须带方法体,
|
|
抽象方法和虚方法
|
访问类型不能是private;属于类的成员,默认都是 private,所以必须声明其类型;
|
|
子类
|
继承抽象类必须重写抽象类中所有的抽象方法和抽象属性,不然要将该类定义为抽象类;
|
|
重写方法 override
|
只能重写用 abstract,virtual,override 修饰的方法 [ 重写不能修改方法的定义,方法是什么访问类型,返回值类型,重写方法也一样 ]
|
abstractclassBaseTest// 抽象类
{
publicabstractvoidSleep(int vara,int varb); // 抽象方法,不能有{} ,
publicabstractintfun(int ab, int aba);
publicvirtualintfun2() { return0; } // 虚方法,要有{}
}
classBaseTest2 : BaseTest// 抽象类被继承
{
publicoverridevoidSleep(int var1,int var2) { }
publicoverrideintfun(int a, int b) { return1; }
}
abstractclassBaseTest3:BaseTest
{
}
.................................. C#的密封类 sealed ...................................
使用 sealed 会提高运行效率,因为类不用担心被继承,子类中的方法不用担心被重写
密封类:如果有些类不想被继承,就定义为 密封类
能被继承,所以类中的 virtual 方法会自动转为 非 virtual,即 virtual 不起作用
密封方法:子类中某些 override 方法不想再被[ 子类的子类 ]重写,就定义为 密封方法
sealedoverride 一定是连用,只能出现在子类中
abstractclassA
{
publicabstractvoidArea();
}
classB : A
{
publicsealedoverridevoidArea() // 密封方法
{
Console.WriteLine("B.Area()");
}
}
sealedclassC : B
{
publicoverridevoidArea() // 密封方法不能被重写
{
Console.WriteLine("C.Area()" );
}
}
.................................. C#的部分类 partial ...................................
同一命名空间下不允许出现相同的两个类
部分类: partial + ClassName
1. 必须在同一个命名空间下使用 partial 修饰
2. 部分类其实就是一个类,编译时会把他们编译成一个类
3. 在一个伙伴类中定义的变量能在另一伙伴类中访问 [ 就是同一个类]
partial class classA
{
public int i = 1;
}
partial class classA
{
public int j = 2;
}
classA cA = new classA();
cA.c = cA.i + cA.j;
Console.WriteLine(cA.c.ToString());
作者:大李子
邮箱:1185241994@qq.com
本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利

浙公网安备 33010602011771号