关于变量名与类名同名问题

关于变量名与类名同名问题

在使用WinForm时会经常遇到类似 Button Button=new Button(); 这样的类型名与变量名同名的问题,刚开始没怎么关注这个问题,所以也没怎么在乎,但现在在书上又看到了类似的代码,顿时让我感到很茫然--变量名之间是不能重复的,如

 

int temp=0;
int temp=1;    //Compiler Error !

 

但为什么类型可以与变量同名呢?要解决这个问题还得回到定义。

  • 变量命名规则:变量名首字母必须为字母(a-z A-Z),下划线(_),或者美元符号($)开始,php编程中所有变量必须以$开始。(有些编译器已经支持中文变量名了)
  • 变量名只能是字母(a-z A-Z),数字(0-9),下划线(_)的组合,并且之间不能包含空格,数字不能放在变量名首位。
  • 变量名不能使用编程语言的保留字。比如在javascript中不能使用true,false,while,case,break保留字等等。

也就是说变量名与类同名并不违反变量的命名规则!!!

那么问题又来了:在同名的前提下,程序运行时是如何分辨类与变量的呢?

先看一段代码:

 

    // 属性 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 为变量时的情况。

 

 

转载于:https://www.cnblogs.com/SilentCode/p/4937413.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值