RhinoFreak
发表于 2021-11-16 15:59
先说结论:就C#而言,字段和方法不足以代替属性。
属性和字段功能上有区别:因为属性获得的值是副本。当它们是结构类型时候,表现完全不一样。另外,属性具有更灵活的权限分配,还可以在里面添加调试代码。属性和方法有区别:方法允许作为函数传递,而属性不允许。反过来说,属性有限制作为函数直接传递的能力。另外,设计DSL时,可以绑定一个属性,就同时支持读写,方法就不行了。在前两点中,很容易找出一个交集,那是刚需属性的地方。
xiaozongpeng
发表于 2021-11-16 16:00
我倒觉得90%的java的getter setter实际上都只是直接操作一个私有变量才是多此一举
maltadirk
发表于 2021-11-16 16:04
C#很多特性都是语法糖,属性和索引就是这样。理论上你确实可以利用getAge和getIndex代替.Age和调用,但是少打几个字它不香吗,它不香吗
Arzie100
发表于 2021-11-16 16:11
这么说吧,C#有了接口,那委托是不是多此一举呢?
johnsoncodehk
发表于 2021-11-16 16:13
语法糖可以简化语法,你说是不是多此一举?
没有属性和索引都封装成方法的话,写代码就没那么简洁和优雅了,
Ylisar
发表于 2021-11-16 16:23
属性是:为了读写权限,逻辑处理。get;set;方法
索引器:为了方便你使用类的内部集合。
XGundam05
发表于 2021-11-16 16:30
既然有if else,为啥还要有三元运算符?弄的很多初学者看不懂。(手动狗头
ainatipen
发表于 2021-11-16 16:37
对外只读对内可写,字段怎么实现,还不是要上属性。
jquave
发表于 2021-11-16 16:39
请问有了属性还要写getXXX是不是多此一举?
RhinoFreak
发表于 2021-11-16 16:41
属性和索引器的本质也是方法。C#中用属性替代了java中自写的get和set方法。实际上算是C#的语法糖。