在.NET中,基类可以某种方式确保派生类定义共享成员吗?

时间:2013-10-06 07:52:48

标签: .net visual-studio-2008 inheritance static-members

当我继承基类时,Visual Studio(此处为v2008)会告诉我需要在派生类中创建的所有MustInherit成员,这非常方便。

但是,我还希望我的派生类定义一些共享成员 - 每个派生类的值不同。不幸的是,.NET不允许对基类中的共享成员使用MustInherit。

有没有其他方法让Visual Studio提醒我,我的派生类还应该包含某些特定的共享成员?

2 个答案:

答案 0 :(得分:1)

不,没有办法做到这一点 - 说实话,这听起来像是一种设计气味。

拥有MustInherit成员的一半是您可以从基类中的代码访问它们。这不适合Shared成员,因为没有迹象表明哪个类可以访问共享成员。

您没有给我们任何背景来解释为什么您想要这样做,但我建议您尝试寻找不同的设计。例如,有时具有并行继承层次结构(例如,一个用于“工厂”,一个用于实例)可能是有用的 - 然后您可能以其他方式创建的成员Shared将成为工厂类型中的实例成员。它确实取决于你想要达到的目标。

答案 1 :(得分:0)

听起来你正试图在类级别上使用多态,这是无效的。

        int result = ParentClass.STATIC_VALUE;
        int result2 = ChildClass.STATIC_VALUE;
        int result3 = AnotherChildClass.STATIC_VALUE;

假设STATIC_VALUE设置为不同的值。您希望.Net如何选择“正确”的值,因为没有任何实例与这三个类别相关联?

ParentClass将始终具有定义的值,而不是基类的值。 ChildClass将具有ParentClass的值,或者 - 如果已定义 - 它自己的值会影响ParentClass的值。

为了检索继承类的值,您必须明确地调用此类。无法使用多态行为。

  

在.NET中,基类可以某种方式确保派生类定义共享成员吗?

它将自动定义,但您无法确保稍后处理基类的其他程序员必须定义自己的值。如果您的问题可以通过使用类成员或属性来解决,则应重新考虑。