博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#语言中的属性语法还可以改进
阅读量:5893 次
发布时间:2019-06-19

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

  个人的一点胡思乱想,希望能被有识之士看到。若能翻译成英文,提交给微软,那就更好玩了。
  C#语言中的属性,把数据(域)和行为(方法)很好地结合到了一起,使得类的编写者可以像编写方法那样,对传入参数进行验证;而类的使用者,则可以向访问域那样访问属性。但更多的时候,我们看到的是这样的代码:
None.gif
string
 name;
None.gif
public
 
string
 Name
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
get dot.gifreturn name; }
ExpandedSubBlockStart.gifContractedSubBlock.gif    
set dot.gif{ name = value; }
ExpandedBlockEnd.gif}
None.gif
  因此我想,如果能够为这种情况而进行一些语法上的优化器不是能更加“优雅”?比如,允许声明可以由get/set访问其所共享的变量:
None.gif
public
 
string
 Name
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
InBlock.gif    
string name;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
get dot.gifreturn name; }
ExpandedSubBlockStart.gifContractedSubBlock.gif    
set dot.gif{ name = value; }
ExpandedBlockEnd.gif}
  甚至,连变量都可以不要,而是提供关键字store,由编译器定义一个匿名的变量来存放属性值:
None.gif
public
 
string
 Name
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
get dot.gifreturn store; }
ExpandedSubBlockStart.gifContractedSubBlock.gif    
set dot.gifsotre = value; }
ExpandedBlockEnd.gif}
  再甚至,如果属性的代码里没有任何验证或计算代码,只是返回store中的值,或者把值放入store中,还可以使用空访问器:
None.gif
public
 sring Name
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
get dot.gif{}  // 空访问器,由编译器生成诸如return store;这样的代码
ExpandedSubBlockStart.gifContractedSubBlock.gif
    set dot.gif{}  // 空访问器,由编译器生成诸如store = value;这样的代码
ExpandedBlockEnd.gif
}
None.gif
None.gif
public
 
float
 P
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
get dot.gifreturn a / b; }  // 非空访问器,编译器不生成代码
ExpandedBlockEnd.gif
}
  怎么样?是不是有那么一点意思?

转载地址:http://hgnsx.baihongyu.com/

你可能感兴趣的文章
网络最大流问题算法小结 [转]
查看>>
iOS推送消息报错误“Domain=NSCocoaErrorDomain Code=3000”的可能问题
查看>>
kvm-1
查看>>
leetcode 64. Minimum Path Sum
查看>>
textkit
查看>>
CentOS7+CDH5.14.0安装CDH错误排查: HiveServer2 该角色的进程已退出。该角色的预期状态为已启动...
查看>>
The Oregon Trail 俄勒冈之旅
查看>>
Excel VBA连接MySql 数据库获取数据
查看>>
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
查看>>
“正在注册字体”问题解决
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
Java 设计模式专栏
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
Office文档出错的几种原因与解决方法
查看>>
正则表达式 学习笔记1.1
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>