2013-10-06 55 views
1

当我从一个基类继承时,Visual Studio(v2008在这里)告诉我需要在派生类中创建的所有MustInherit成员,这非常方便。在.NET中,基类可以确保派生类定义共享成员吗?

不过,我也希望我的派生类中定义一些共享成员 - 其数值将是不同每个派生类。不幸的是,.NET不允许基础类中的共享成员使用MustInherit。

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

回答

1

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

拥有MustInherit成员的一半是你可以从基类中的代码访问它们。这对于Shared成员来说不合适,因为没有指示哪个类访问共享成员。

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

+0

我不太明白..通过基类名访问共享成员(例如。* MyClassBase.ClassID *)明显不同于* MyClass.ClassID *。一个基类包含'Public MustOverride Shared Function ClassID()'也是非法的 - 但这会非常方便。为什么不允许? –

0

听起来好像你正试图在课堂上使用polymorphy,这将无法正常工作。

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

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

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

为了检索继承类的值,你必须明确地调用这个类。没有办法使用多态行为。

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

它会被自动定义,但是你不能确保另一个处理你的基类的程序员以后需要定义它自己的值。您应该重新考虑是否可以通过使用班级成员或属性来解决问题。

相关问题