問題描述
近期作業中接觸到了VB語言,在學習VB的程序中,看到如下一段代碼,很是疑惑,
For Each s In [Enum].GetNames(GetType(Colors))
Console.WriteLine(s)
Next
Enum是列舉類,同C#,但是在使用其靜態方法的時候為什么還要加一對方括號?
問題解決
進行了簡單的搜索后,沒找到答案,請教了下同事,同事說應該是因為關鍵字做為類名,
通過再次搜索及測驗驗證,確實是因為使用了關鍵字做型別名,見微軟官方檔案,
之前進行C#開發時,并未注意到這一點,或許是因為從來不會將關鍵字作為型別名或變數名,
接下來就進行了一些簡單的測驗,如下:
Module Program
Sub Main(args As String())
'使用關鍵字作為變數名
'Dim shared As New [Enum] 報錯,提示“Shared”在區域變數宣告中無效
Dim [shared] As New [Enum]
[shared].AcceptDetails()
[shared].Display()
'訪問靜態成員
Console.WriteLine("Side: {0}", [Enum].Side)
Console.ReadLine()
End Sub
End Module
'使用關鍵字做類名
'Public Class Enum 報錯,提示關鍵字作為識別符號無效
Public Class [Enum]
Private length As Double
Private width As Double
Public Shared Side As Double = 5
Public Sub AcceptDetails()
length = 4.5
width = 3.5
End Sub
Public Function GetArea() As Double
GetArea = length * width
End Function
Public Sub Display()
Console.WriteLine("Area: {0}", GetArea())
End Sub
End Class
為了進行對比,搜索了C#使用關鍵字作為元素名的方式,見微軟官方檔案,
C#使用關鍵字做元素名時,通過加'@'解決,同樣進行了簡單的測驗,如下:
class Program
{
static void Main(string[] args)
{
// 使用關鍵字作為變數名
// var static = new @enum(); 報錯,提示修飾符“static”對該項無效
var @static = new @enum();
@static.AcceptDetails();
@static.Display();
//訪問靜態成員
Console.WriteLine("Side: {0}", @enum.Side);
Console.ReadLine();
}
}
// 使用關鍵字做類名
// class enum 報錯,提示應輸入識別符號
class @enum
{
public void AcceptDetails()
{
_length = 4.5;
_width = 3.5;
}
public double GetArea() => _length * _width;
public void Display() => Console.WriteLine($"Area: {GetArea()}");
private double _length;
private double _width;
public static double Side = 5;
}
總結
首先,VB是不區分大小寫的,因此很容易暴露該問題,比如Enum類,Enum同樣是關鍵字,無法直接使用,C#區分大小寫,enum為關鍵字,而Enum為型別,可以直接使用Enum,
其次,VB中使用關鍵字作為元素名時,需添加方括號,如果是呼叫型別的靜態方法,也可以完全限定,如System.Enum.GetNames(),C#中使用關鍵字作為元素名時,需使用'@'前綴,
最后,盡量還是不要使用關鍵字作為元素名稱,
轉載請注明出處,歡迎交流,轉載請註明出處,本文鏈接:https://www.uj5u.com/net/308981.html
標籤:.NET技术
上一篇:WPF實作聚光燈效果
