博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于变量名与类名同名问题
阅读量:4589 次
发布时间:2019-06-09

本文共 1573 字,大约阅读时间需要 5 分钟。

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

在使用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

你可能感兴趣的文章
C 自删除技术---批处理方式
查看>>
maven学习(下)利用Profile构建不同环境的部署包
查看>>
win8自带输入法如何切换全角、半角操作流程
查看>>
TensorFlow windows 安装(base anaconda)
查看>>
Percona XtraDB Cluster集群
查看>>
mybatis学习笔记1--HelloMybatis
查看>>
正则表达式全局匹配网址
查看>>
js多张图片合成一张图,canvas(海报图,将二维码和背景图合并) -----vue
查看>>
前端页面刷新与跳转
查看>>
笔记本链接公司内网(跨网段) ,然后保证wifi
查看>>
Httpd做应用代理
查看>>
如何用Jmter生成合法的手机号
查看>>
Jmeter生成正常的人名
查看>>
Jmeter 做压力测试步骤
查看>>
jmeter生成随机的四位数
查看>>
Jmeter做接口的压力测试
查看>>
sql语句优化的30种方法
查看>>
MyISAM和InnoDB的区别
查看>>
springboot2.0 management.security.enabled无效
查看>>
spring cloud启动zipkin,报错maven依赖jar包冲突 Class path contains multiple SLF4J bindings
查看>>