当“虚拟”是可选的时,C#中“密封”的目的是什么?
发布时间:2020-12-15 08:44:39 所属栏目:百科 来源:网络整理
导读:如果一个类没有任何虚方法,我认为没有任何继承类的方法会影响任何未明确引用该实例作为子类实例的代码,即 Subclass obj = new Subclass() 而不是 BaseClass obj = new SubClass() 因此,为什么密封甚至存在? 如果你没有声明任何虚拟的东西(我认为在密封的类
如果一个类没有任何虚方法,我认为没有任何继承类的方法会影响任何未明确引用该实例作为子类实例的代码,即
Subclass obj = new Subclass() 而不是 BaseClass obj = new SubClass() 因此,为什么密封甚至存在? 如果你没有声明任何虚拟的东西(我认为在密封的类中没有任何意义),它就会阻止(例如)一个ListViewItem,它存储一些额外的信息,这些信息代表了“知道”代码的代码.信息是存在的,与重写的方法不同,它对未使用该子类编写的代码没有影响. 解决方法
(1)密封类
我可能有一个方法接受BankAccount类型的对象.我不希望您能够创建EvilBankAccount:BankAccount并将其传递给我的方法. EvilBankAccount可能会破坏我的系统,这会对BankAccount做出假设 – 例如,它可以被序列化.也许我克隆BankAccount以防止一旦提交外部操作,并且EvilBankAccount克隆就好了,但是在其构造函数中启动一个计时器,每30秒自动递增一次. (2)密封件 您可以覆盖虚拟方法或属性,但将其密封以使其无法在继承层次结构中进一步覆盖.这里的一个用例是当您需要从构造函数访问该成员时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- swift – public static vs open static vs public class v
- ruby-on-rails-3 – 如何让rake在没有参数的情况下自动运行
- Oracle ORDS的简单SQL配置模板
- 我的TDD实践:可测试性驱动开发(上)
- c# – 带有TabbedView的Xamarin.Forms MasterDetailPage –
- 文本过滤之grep,egreo及fgrep 三剑客及正则表达式
- postgreSql 中自定义的字段和数据库关键字重名
- MediaPlayer/MediaPlayer 视频播放
- Ajax概念、HTTP请求概念、Ajax的原生和jQuery实现、跨域知识
- Oracle 数据库自动存储管理-安装配置