【问题标题】:How do I override a property in a non-inheritable class?如何覆盖不可继承类中的属性?
【发布时间】:2009-10-20 10:46:46
【问题描述】:

在 MSDN 文档中,System.Reflection.Assembly 有一个名为 CodeBase 的属性,它被定义为可覆盖。

Public Overridable ReadOnly Property CodeBase As String

但是,如果我尝试创建一个继承 System.Reflection.Assembly 的新类,我会收到一条错误消息,告诉我它不能被继承。那么如何覆盖这个属性呢?

【问题讨论】:

  • 我可能会建议使用封装而不是继承来解决这个问题。
  • 我不想知道为什么需要从Assembly继承...
  • Stefan,我想从字节数组加载程序集,同时将代码库属性设置为原始程序集文件的位置。我知道你说你不想知道,但我想也许我的理由没有你想的那么糟糕:)

标签: .net inheritance overriding


【解决方案1】:

很遗憾,您不能这样做。

虽然Assembly类本身被声明为public,但它只提供了一个internal构造函数。这实际上意味着它只能从它自己的程序集 mscorlib 中实例化(或继承)。

【讨论】:

    【解决方案2】:

    我不认为你可以。虽然Assembly 不是sealed(VB.NET 中的NotInheritable),但它没有公共构造函数;构造函数是internal(VB.NET 中的Friend)。所以它可以被继承,但仅限于与自身相同的程序集中的类型(即 mscorlib)。

    【讨论】:

    • 将此标记为答案,因为它比另一个快大约 10 秒。
    • 不太确定,但我实际上认为卢克比我快一点。
    • 可以发誓这个在按最旧排序的列表中排名靠前。哦,好吧,谢谢你的诚实;)
    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 2013-12-04
    • 2011-05-23
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多