【问题标题】:Private static members and inheritance私有静态成员和继承
【发布时间】:2012-08-28 17:42:44
【问题描述】:

所以我正在使用一个包含一些 Web 服务的单例类。对服务的引用存储为私有静态只读成员。我想要一个非常相似的类,它用相同的接口包装不同的 Web 服务。如果我从第一个类继承并用新成员覆盖私有静态只读成员,一切都会像我想的那样顺利吗?所有继承的函数(一些公共的、一些私有的、一些静态的)都会使用新的引用吗?

我问是因为我之前遇到过一些关于静态成员继承的怪癖。

【问题讨论】:

    标签: c# oop inheritance static-members


    【解决方案1】:

    不,它不会起作用。静态成员附加到类型,而不是实例,并且不能被覆盖。如果您更改派生类中的静态值(必须至少为 protected,而不是 private),这将更改基类和派生类的所有实例的值。

    这里要注意的重要一点是静态字段附加到基本类型。当您从该基类型派生时,您不会获得静态字段的新副本,派生类使用与基类相同的静态实例。

    【讨论】:

    • 我知道它们附加到一个类型,但方法附加到一个实例,对吗?如果一个实例是派生类的,这些方法不应该与派生类的静态成员一起操作吗?即使基类中有同名的成员?
    • 方法附加到一个实例,是的,但是如果方法与静态字段(您的 Web 服务代理,大概)交互,那么这些字段将在派生和基本类型的所有实例之间共享(因此会表现出类似静态的行为)。
    猜你喜欢
    • 1970-01-01
    • 2015-06-10
    • 2020-09-04
    • 2015-01-21
    • 2020-09-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多