Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 必须继承和共享函数_Vb.net_Oop_Abstract Class_Static Methods - Fatal编程技术网

Vb.net 必须继承和共享函数

Vb.net 必须继承和共享函数,vb.net,oop,abstract-class,static-methods,Vb.net,Oop,Abstract Class,Static Methods,我正在研究一个VB.NET类(我没有编写),它在C#中声明为MustInherit(abstract),它有三个方法,所有这些方法都被定义为Shared(C#中的static)。类中没有属性或字段-只有三个方法。从面向对象的角度来看,这有意义吗 我的想法是否定的,因为通过让它MustInherit,你本质上是说你不能创建这个类的实例——你必须从它继承并创建派生类的实例。但是,由于所有方法都是共享的,因此实际上永远不会创建父类的实例,因此MustInherit没有任何好处。您也可以不将其标记为Mu

我正在研究一个VB.NET类(我没有编写),它在C#中声明为
MustInherit
abstract
),它有三个方法,所有这些方法都被定义为
Shared
(C#中的
static
)。类中没有属性或字段-只有三个方法。从面向对象的角度来看,这有意义吗

我的想法是否定的,因为通过让它
MustInherit
,你本质上是说你不能创建这个类的实例——你必须从它继承并创建派生类的实例。但是,由于所有方法都是共享的,因此实际上永远不会创建父类的实例,因此
MustInherit
没有任何好处。您也可以不将其标记为
MustInherit
,而是随时从中继承


这样创建类是否有意义?

从面向对象的角度来看,这没有多大意义


然而,VB没有一种像C#那样将类标记为共享的方法。在C#中,您可能会将该类标记为一个
静态类
——MustInherit很可能是为了防止人们创建它的实例,即使它基本上是一个静态类。

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

正如其他人所说,听起来他们真的想要一个C#static类。VB的“static”等价物是“shared”,但你不能在VB中标记类为“shared”。区别在于有人可以从这个类继承,然后创建一个实例。C#static类是密封的


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

在VB中声明类a模块基本上就是在C#中声明为静态。从VB7开始就存在了。模块得到在命名空间中自动导入,这可能是不使用命名空间的原因。