MustInherit和共享函数

时间:2009-06-06 00:50:11

标签: vb.net oop abstract-class static-methods

我正在看一个声明为MustInherit(C#中的abstract)的VB.NET类(我没写过),我相信它有三种方法,所有方法都是定义为Shared(C#中的static)。类中没有属性或字段 - 只有三种方法。从OO的角度来看,这有什么意义吗?

我的想法是否定的,因为通过使它成为MustInherit,你实际上是说你不能创建这个类的实例 - 你必须从它继承并创建派生的<的实例/ em> class。但是由于所有方法都是共享的,所以你永远不会真正创建父类的实例,所以MustInherit没有用。您也可以标记它MustInherit,只要您愿意,就可以继承它。

是否存在以这种方式创建课程的情况?

3 个答案:

答案 0 :(得分:2)

正如其他人所说,听起来他们真的想要一个C#静态类。 VB相当于“静态”是“共享”,但你不能在VB中标记“共享”类。不同之处在于有人可以继承此类,然后创建实例。 C#静态类是密封的。

他们应该做的是使用Module。 VB Module和C#静态类实际上是相同的:成员与类型相关联而不是实例,并且您不能从它们继承。

答案 1 :(得分:0)

从OO的角度来看,这并没有多大意义。

然而,VB没有办法将类标记为Shared,就像C#那样。在C#中,您可能会将此类标记为static class - 最有可能添加MustInherit以防止人们创建它的实例,即使它基本上是静态类。

答案 2 :(得分:0)

在C#中,一个类可以声明为static(= Shared),我认为VB.NET不允许这样做,所以作为一种解决方法,它被标记为abstract(MustInherit),以便它永远不会被实例化