【问题标题】:Preventing inheritance of static member防止静态成员的继承
【发布时间】:2014-10-08 02:46:00
【问题描述】:

基地:

public abstract class systemClient : IDisposable
{
    public static List<systemClient> Collection = new List<systemClient>();
    [...]
}

派生类

public class station : systemClient
{
    [...]
}

在此设置中,我可以访问station.Collection。

问题是: 有没有办法隐藏station.Collection?

【问题讨论】:

  • 如果你能展示一个真实的例子会有所帮助。在您的示例中,example 无论如何都是隐式私有的...如果您的示例遵循 .NET 命名约定,这也会有所帮助..
  • 静态成员不会被继承。是编译器允许你通过继承类调用静态字段,但技术上是不正确的。
  • @Maarten 从(除其他外)这个问题stackoverflow.com/questions/2281775/… 看来这是有意的行为。这也得到了它编译和运行良好这一事实的支持。
  • @Mark 您提到的问题的答案并不明确恕我直言。另外,恕我直言,这是一个编译器技巧,而不是继承,请参阅stackoverflow.com/a/2288663/261050。此外,其他问题,例如stackoverflow.com/questions/4945439/…,对“功能”并不那么积极。
  • @Maarten 对我来说更像句法糖精。我发现有用的 tbh 更令人困惑。

标签: c# .net inheritance static language-design


【解决方案1】:

我同意 Tim B 的回答。您不能简单地“忽略”您继承的类的某些方法或属性。但是,你可以做的是实现一个interface,它可以做你想做的工作。如需进一步阅读,请查看here。

【讨论】:

    【解决方案2】:

    你不能。通过将inhClass 创建为baseClass 的子类inhClass 必须 提供baseClass 提供的所有内容。否则baseClass x = new inhClass() 将无效。

    在这种特定情况下,尽管您已将方法设为静态,但这意味着它实际上并没有自己的方法副本。 inhClass 只是访问baseClass 中的静态地址。

    【讨论】:

    • 我认为对于static 成员来说这是一个不同的故事,但如果我仔细考虑的话,那是没有意义的。
    • 嗯,它略有不同......但我更像是 Java 专家而不是 dot net 专家,所以我对 dot net 方面的细节了解得不够多,无法深入探讨.
    猜你喜欢
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2023-03-14
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多