virtual和abstract都是用来润饰父类的,经过覆盖父类的界说,让子类重新界说。
它们有一个共同点:假如用来润饰办法,前面有必要增加public,要不然就会呈现编译过错:虚拟办法或笼统办法是不能私有的。究竟加上virtual或abstract便是让子类重新界说的,而private成员是不能被子类访问的。
但是它们的差异很大。(virtual是“虚拟的”,abstract是“笼统的”).
(1)virtual润饰的办法有必要有完成(哪怕是只是增加一对大括号),而abstract润饰的办法必定不能完成。如关于virtual润饰的办法假如没有完成:
[C#]纯文本检查
publicclassTest1
{
publicvirtualvoidfun1();
}
上面是过错写法“Test1.fun1()”有必要声明主体,由于它未标记为abstract、extern或partial
关于abstract润饰的办法假如有完成:
[C#]纯文本检查
publicabstractclassTest2
{
publicabstractvoidfun2(){}
}
上面是过错写法“Test2.fun2()”无法声明主体,由于它标记为abstract
(2)virtual能够被子类重写,而abstract有必要被子类重写
[C#]纯文本检查
classBaseTest1
{
publicvirtualvoidfun(){}//有必要有完成
}
classDeriveTest1:BaseTest1
{
//publicoverridevoidfun(){}
}
编译不会呈现过错,假如重写了virtual润饰的办法,前面有必要增加override(这样就告诉了编译器你要重写虚拟办法),并且有必要有完成,不然编译出错;
[C#]纯文本检查
abstractclassBaseTest2
{
publicabstractvoidfun();
}
classDeriveTest2:BaseTest2
{
//publicoverridevoidfun();过错1:没有完成
//publicvoidfun(){}过错2:重写时没有增加override
//overridevoidfun(){}过错3:虚拟成员或许笼统成员不能是私有的(只要在父类中声明晰虚拟成员或笼统成员,即使是承继的也要加上这个限制)
publicoverridevoidfun(){}//假如重写办法;过错:“A.DeriveTest2”不完成承继的笼统成员“A.BaseTest2.fun()”
}
(3)假如类成员被abstract润饰,则该类前有必要增加abstract,由于只要笼统类才能够有笼统办法。
(4)无法创立abstract类的实例,只能被承继无法实例化,比方:BaseTest2base2=newBaseTest2();将呈现编译过错:笼统类或接口不能创立实例。
(5)C#中假如要在子类中重写办法,有必要在父类办法前加virtual,在子类办法前增加override,这样就避免了程序员在子类中不小心重写了父类办法。
(6)abstract办法有必要重写,virtual办法有必要有完成(即使它是在abstract类中界说的办法).
[C#]纯文本检查
abstractpublicclassTest
{
//publicvirtualvoidPrinf();过错:virtual办法有必要有完成
publicvirtualvoidPrinf()//abstract类的virtual办法能够不重写;abstract办法有必要重写。
{
Console.WriteLine(“AbstractPrintf…”);
}
}
publicclassClass1:Test
{
/*
publicoverridevoidPrinf()//派生类中不重写abstract类的virtual办法照样能够运行,不过调用派生类目标的Printf办法时,调用的是父类的。
{
Console.WriteLine(“ClassOneOverridePrintf…”);
}
*/
}
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com