C# 类/方法修饰符
Posted
技术标签:
【中文标题】C# 类/方法修饰符【英文标题】:C# class/methods modifiers 【发布时间】:2012-06-24 11:49:15 【问题描述】:我正在尝试使用类/方法修饰符制作电子表格。电子表格本身可以位于here,尽管我有一些问题:
1) 正如我所读,方法也可以是sealed
,但这样做的目的是什么?保护方法不被覆盖?
2) abstract
类中的字段是否也必须是 abstract
?
3) virtual
方法可以在定义的对象/类中有主体吗?
【问题讨论】:
你可以试一试看看会发生什么 2) 字段声明保留存储,没有机会定义或重新定义交互。覆盖发生在交互上,例如方法和属性 getter/setter。当一个属性看起来是存储时,一开始您可能不清楚您可以覆盖一个属性。如果是这样,请记住这只是 C# 的一个优点;当您声明 myPropget;set; 时,它会自动为您创建一个支持字段,并且会针对该字段进行交互。 【参考方案1】:1:是的,就是这样;阻止虚方法在子类中再次被覆盖
2:字段永远不是抽象的;字段正在实施;在抽象类中必须是抽象的
3:是的,因为虚拟修饰符与抽象修饰符不同。两者都代表一个虚拟方法 - 区别在于完全基类中是否有实现
【讨论】:
【参考方案2】:sealed
方法 prevents further overriding 沿继承链向下。 sealed
方法也需要有 override 关键字。
字段不能是abstract
。字段是类级别的变量。你不能覆盖它。属性和方法可以是abstract
,但不是必须的。
virtual
和abstract
方法的区别在于虚方法有一个实现。您可以在派生类中覆盖该实现。
【讨论】:
【参考方案3】:-
是的
不 - 没有抽象字段之类的东西,该类是抽象的,这意味着它不能被实例化,但其上定义的字段是派生非抽象类布局的一部分。
是的
【讨论】:
以上是关于C# 类/方法修饰符的主要内容,如果未能解决你的问题,请参考以下文章
在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?