【问题标题】:MustInherit and Shared FunctionsMustInherit 和共享函数
【发布时间】:2009-06-06 00:50:10
【问题描述】:

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

我的想法是否定的,因为通过将其设为 MustInherit,您实际上是在说您不能创建此类的实例 - 您必须从它继承并创建 派生的的实例> 类。但是由于所有方法都是共享的,所以无论如何您永远不会真正创建父类的实例,所以MustInherit 没有好处。您也可以标记它MustInherit,并随时从它继承。

是否存在以这种方式创建类有意义的情况?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 模块会自动导入到命名空间中,这可能是不使用模块的原因。
    【解决方案2】:

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

    但是,VB 无法像 C# 那样将类标记为共享。在 C# 中,您可能会将此类标记为 static class - 添加 MustInherit 很可能是为了防止人们创建它的实例,即使它基本上是一个静态类。

    【讨论】:

    • 在 VB 中声明一个模块类基本上是在 C# 中将其声明为静态。它自 VB7 以来就一直存在。
    【解决方案3】:

    在 C# 中,可以将类声明为静态(= 共享),我认为 VB.NET 不允许这样做,因此作为一种解决方法,它被标记为抽象(MustInherit),因此它永远不会被实例化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 2014-03-21
      相关资源
      最近更新 更多