關于變量名與類名同名問題
在使用WinForm時會經常遇到類似 Button Button=new Button(); 這樣的類型名與變量名同名的問題,剛開始沒怎么關注這個問題,所以也沒怎么在乎,但現在在書上又看到了類似的代碼,頓時讓我感到很茫然--變量名之間是不能重復的,如
int temp=0;int temp=1; //Compiler Error !
但為什么類型可以與變量同名呢?要解決這個問題還得回到定義。
也就是說變量名與類同名并不違反變量的命名規則!!!
那么問題又來了:在同名的前提下,程序運行時是如何分辨類與變量的呢?
先看一段代碼:
// 屬性 X Y 為非靜態 public class Point { public int X { get; set; } public int Y { get; set; } } class PRogram { static void Main(string[] args) { Point Point=new Point(); Point.X = 100; Point.Y = 100; Console.WriteLine(Point.X + " " + Point.Y); Console.ReadKey(); } }
由于X 與 Y 為非靜態,所以無法通過類直接訪問,所以編譯器會把 Point 認為是 變量。
在看一段代碼:
// 屬性 X Y 為靜態 public class Point { public static int X { get; set; } public static int Y { get; set; } } class Program { static void Main(string[] args) { //Point Point=new Point(); 注不注釋這段代碼對結果無影響 Point.X = 100; Point.Y = 100; Console.WriteLine(Point.X + " " + Point.Y); Console.ReadKey(); } }
此時可以看出編譯器會優先考慮 Point 為類的情況,在這種情況完全成立時不會把 Point 看作變量。
所以變量名可以與類型同名(如上面的 Point Point=new Point()),但不能與關鍵字同名(如 string string=new string()) ,而在使用時編譯器會優先考慮 Point 為類的情況,在這種情況下不成立時在考慮 Point 為變量時的情況。
新聞熱點
疑難解答