作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以在 Internet 上读到很多关于 VB.Net 模块与 c#.Net 静态类相同的信息。我还可以读到接近 Static Class
的内容是一个看起来像这样的类:
'NotInheritable so that no other class can be derived from it
Public NotInheritable Class MyAlmostStaticClass
'Private Creator so that it cannot be instantiated
Private Sub New()
End Sub
'Shared Members
Public Shared Function MyStaticFunction() as String
Return "Something"
End Function
End Class
Module
会更舒服像这样:
Public Module MyEquivalentStaticClass
Public Function MyStaticFunction() as String
Return "Something"
End Function
End Module
Module
你失去了一级
Namespace
层次结构,以下 3 个语句是相等的:
'Call through the Class Name is compulsory
Dim MyVar as String = Global.MyProject.MyAlmostStaticClass.MyStaticFunction()
'Call through the Module Name is OPTIONAL
Dim MyVar as String = Global.MyProject.MyEquivalentStaticClass.MyStaticFunction()
Dim MyVar as String = Global.MyProject.MyStaticFunction()
Namespace
级别。 ,这意味着更多
Module
声明,即更多的 Intelisense 污染。
Class
,是否有解决方法或者这是要付出的代价?宣言?
最佳答案
不,在 VB.NET 中没有与 C# 静态类完全等价的东西。如果 VB 能够添加 Shared
,那就太好了。类声明的修饰符,如下所示:
Public Shared Class Test ' This won't work, so don't try it
' Compiler only allows shared members in here
End Class
Classes cannot be declared 'Shared'
Shared
的不可实例化类成员(编译器不强制执行该规则的安全性),或 Module
, 这使得一切 Shared
,即使您没有通过 Shared
明确表示修饰符 Class
只有
Shared
成员(member)超过
Module
.但是,这是一个偏好问题。
MyModule.MyMethod()
Module MyModule
Public Sub Main()
Dim t As Type = GetType(MyClass)
End Sub
End Module
Public NotInheritable Class MyClass
Private Sub New()
End Sub
Public Shared Sub MyMethod()
End Sub
End Class
t.Attributes
, 你会看到它等于
Public Or Sealed
.所以
MyClass
类型既是密封的(
NotInheritable
)又是公共(public)的。但是,如果您在 C# 中执行此操作:
class Program
{
static void Main(string[] args)
{
Type t = typeof(Test);
}
}
public static class MyClass
{
public static void MyMethod()
{ }
}
t.Attributes
再次,这一次,值为
Public | Abstract | Sealed | BeforeFieldInit
.那不一样。由于您不能在 VB 中将一个类声明为
NotInheritable
和
MustInherit
同时,你没有机会完全复制那个东西。因此,尽管它们或多或少是等价的,但类型的属性是不同的。现在,只是为了好玩,让我们试试这个:
Module MyModule
Public Sub Main()
Dim t As Type = GetType(MyModule)
End Sub
End Module
t.Attributes
模块为
Sealed
.就是这样。只需
Sealed
.所以这也不一样。在 VB 中获得一个真正的静态类(意味着通过反射检查时该类型具有相同的属性)的唯一方法是将其编写在 C# 类库中,然后在 VB 中引用该库。
关于vb.net - 模块真的与 SharedMembers-NotInheritable-PrivateNew 类相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54691197/
我可以在 Internet 上读到很多关于 VB.Net 模块与 c#.Net 静态类相同的信息。我还可以读到接近 Static Class 的内容是一个看起来像这样的类: 'NotInheritab
我是一名优秀的程序员,十分优秀!