假设您有一个包含共享成员的类来引用像
这样的已知值public class Semaphore()
{
public static int Red = 0;
public static int Yellow = 1;
public static int Green = 2;
}
在VB.Net中,您可以将这些静态(共享)值分配给const,如下所示:
Public Class Transit
Private Const Red as Integer = Semaphore.Red
End Class
但在C#中这是不可能的。有一个原因?一些解决方法?
更新
实际上,VB.NET的行为方式与C#相同。至少在VS 2012中。唯一的区别是在C#中,共享成员甚至在智能感知中都不可用。
答案 0 :(得分:2)
您可以使用const
(msdn)而不是readonly
。
readonly关键字与const关键字不同。 const字段可以 只能在该领域的声明中初始化。一个只读字段 可以在声明或构造函数中初始化。 因此,只读字段可以具有不同的值,具体取决于 使用的构造函数。此外,虽然const字段是编译时 常量,readonly字段可用于运行时常量,如 这一行:public static readonly uint l1 =(uint)DateTime.Now.Ticks;
C#解决方法示例:
public class Semaphore
{
public static int Red = 0;
public static int Yellow = 1;
public static int Green = 2;
}
class Transit
{
readonly int Red = Semaphore.Red;
}
答案 1 :(得分:2)
是否可以更改Semaphore.Red
:
Semaphore.Red = 5;
如果没有,请在那里使用常量:
public class Semaphore
{
public const int Red = 0;
public const int Yellow = 1;
public const int Green = 2;
}
答案 2 :(得分:1)
实际上,VB.NET的行为方式与C#相同。至少在VS 2012中。唯一的区别是在C#中,共享成员甚至在智能感知中都不可用。
这是因为在VB中,可以调用所有Public
和Friend
Module
成员而不指定Module
名称:
请考虑关注Module
:
Namespace TestNamespace
Module TestModule
Public ReadOnly Property TestPropertyFromModule As String
Get
Return "My Test Property Value"
End Get
End Property
End Module
End Namespace
只要您的文件顶部有Imports TestNamespace
,就可以在不指定TestPropertyFromModule
名称的情况下致电TestModule
:
Imports TestNamespace
Public Class TestClass
Public Sub New()
Dim test = TestPropertyFromModule
End Sub
End Class
在C#中,这是不可能的。您必须使用class
名称并撰写TestModule.TestPropertyFromModule
。这就是为什么VB.NET上的intellisense会在C#中显示不同的可用方法/属性/等等。