C#学习基础概念二十五问 11-15

时间:2021-05-20

11.可以使用抽象函数重写基类中的虚函数吗?

答:

可以


需使用new修饰符显式声明,表示隐藏了基类中该函数的实现

或增加override修饰符,表示抽象重写了基类中该函数的实现

示例:

classBaseClass
{
publicvirtualvoidF()
{
Console.WriteLine("BaseClass.F");
}
}
abstractclassDeriveClass1:BaseClass
{
publicabstractnewvoidF();
}

//感谢watsonhua(http://huazhihao.cnblogs.com/)的指点
//是他提醒了我还可以用这种方法抽象重写基类的虚方法
abstractclassDeriveClass2:BaseClass
{
publicabstractoverridevoidF();
}

12.密封类可以有虚函数吗?

答:

可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数

示例:

classBaseClass
{
publicvirtualvoidF()
{
Console.WriteLine("BaseClass.F");
}
}
sealedclassDeriveClass:BaseClass
{
//基类中的虚函数F被隐式的转化为非虚函数

//密封类中不能再声明新的虚函数G
//publicvirtualvoidG()
//{
//Console.WriteLine("DeriveClass.G");
//}
}

13.什么是属性访问器?

答:

属性访问器(PropertyAccessor),包括get访问器和set访问器分别用于字段的读写操作

其设计目的主要是为了实现面向对象(OO)中的封装思想。根据该思想,字段最好设为private,一个精巧的类最好不要直接把字段设为公有提供给客户调用端直接访问

另外要注意属性本身并不一定和字段相联系



14.abstract可以和virtual一起使用吗?可以和override一起使用吗?

答:

abstract修饰符不可以和static、virtual修饰符一起使用

abstract修饰符可以和override一起使用,参见第11点

示例:


usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespaceExample14
{
classBaseClass
{
publicvirtualvoidF()
{
Console.WriteLine("BaseClass.F");
}
}
abstractclassDeriveClass1:BaseClass
{
//在这里,abstract是可以和override一起使用的
publicabstractoverridevoidF();
}
classProgram
{
staticvoidMain(string[]args)
{
}
}
}

15.接口可以包含哪些成员?

答:

接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章