C#语言中的属性语法还可以改进

  个人的一点胡思乱想,希望能被有识之士看到。若能翻译成英文,提交给微软,那就更好玩了。

  C#语言中的属性,把数据(域)和行为(方法)很好地结合到了一起,使得类的编写者可以像编写方法那样,对传入参数进行验证;而类的使用者,则可以向访问域那样访问属性。但更多的时候,我们看到的是这样的代码:

string name;
public string Name
{
    
get return name; }
    
set { name = value; }
}


  因此我想,如果能够为这种情况而进行一些语法上的优化器不是能更加“优雅”?比如,允许声明可以由get/set访问其所共享的变量:

public string Name
{
    
string name;

    
get return name; }
    
set { name = value; }
}

  甚至,连变量都可以不要,而是提供关键字store,由编译器定义一个匿名的变量来存放属性值:

public string Name
{
    
get return store; }
    
set sotre = value; }
}

  再甚至,如果属性的代码里没有任何验证或计算代码,只是返回store中的值,或者把值放入store中,还可以使用空访问器:

public sring Name
{
    
get {}  // 空访问器,由编译器生成诸如return store;这样的代码
    set {}  // 空访问器,由编译器生成诸如store = value;这样的代码
}


public float P
{
    
get return a / b; }  // 非空访问器,编译器不生成代码
}


  怎么样?是不是有那么一点意思?
posted @ 2006-07-31 10:48 Anders Liu 阅读(1729) 评论(8)  编辑 收藏 网摘

  回复  引用    
#1楼2006-07-31 11:59 | FA[未注册用户]
如果你能搞出编译器,你怎么改都行!!!!
  回复  引用    
#2楼2006-08-04 11:20 | lonfone[未注册用户]
那直接用 PUBLIC 变量得了,何必用属性访问器.
  回复  引用  查看    
#3楼[楼主]2006-08-04 18:19 | Anders Liu (lover_P)      
@FA
我还真学过一阵编译原理,不过那玩意需要极大的耐性和大量的理论训练,我都没有,所以以失败告终。

  回复  引用  查看    
#4楼[楼主]2006-08-04 18:20 | Anders Liu (lover_P)      
@lonfone
当然不能用public变量了~
者要考虑扩展性,可能一开始需要空访问器,但后期可能会向其中添加代码。

  回复  引用    
#5楼2006-08-29 11:02 | 老赵[未注册用户]
你的意思是不是在他的外面再包上一层外衣,使用起来更方便啊!!!!
  回复  引用    
#6楼2007-11-28 18:33 | menxin[未注册用户]
空访问器已经实现了
{get;set;}

  回复  引用  查看    
#7楼2008-08-15 02:19 | JimLiu      
@menxin
实际上是编译器生成了m_xxx字段吧?
Property是个好东西,看着舒服,比getXXX()/setXXX()来的舒服

  回复  引用  查看    
#8楼2008-08-15 02:19 | JimLiu      
public string Name
{
string name;

get { return name; }
set { name = value; }
}
这个挺好玩,也很不错




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 463809




相关文章:

相关链接: