关于变量名与类名同名问题
在使用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 为变量时的情况。
原文:http://www.cnblogs.com/SilentCode/p/4937413.html