接口上的c#属性

Nil*_*Pun 33 .net c#

任何人都可以帮助我,在接口或抽象类中包含属性是否是最佳做法?

我想联系应该只有方法签名?

Des*_*sus 25

属性是方法的语法糖.考虑一下:

我有一个属性:

String PropertyA { get; set; } 
Run Code Online (Sandbox Code Playgroud)

在运行时,这变成这样的:

String get_PropertyA() { ... }
void set_PropertyA(String value) { ... }
Run Code Online (Sandbox Code Playgroud)

请注意,"..."表示代码生成器将放在那里的代码.实际上,我所说的是属性在C#之外并不存在,因为它们使用我的示例中指示的对流编译为方法.要确认我说的是什么,您可以使用反射并查看反射代码的外观.

然而,如果属性在实现中做了一些非常重要的事情,那么将属性放在接口上可能是不好的做法.例如,如果我想设置变量并更新其他变量,或者由于内部条件而设置属性可能会拒绝我的属性赋值,则不应使用属性.我认为这是一个适用于接口之外的一般规则.

  • 正如你所指出的那样,做一些非平凡的事情对于物业期来说是一种不好的做法.它会导致调试器出现问题,并且该类的消费者不清楚是否会完成重要的工作.对于接口,您无法确定它是否是非平凡的,因为它没有实现.所有你能做的就是通过名字来暗示非平凡的工作 - 但是根据定义工作.自然意味着一种方法. (2认同)

Dan*_*ite 12

在界面中具有属性是完全可以接受的.我一直这样做.


bry*_*mac 11

界面中的属性很好

看到:

http://msdn.microsoft.com/en-us/library/ms173156.aspx

接口由方法,属性,事件,索引器或这四种成员类型的任意组合组成.接口不能包含常量,字段,运算符,实例构造函数,析构函数或类型.它不能包含静态成员.接口成员自动公开,并且不能包含任何访问修饰符.

  • 仅仅因为它可能并不意味着它是OP所要求的最佳实践. (20认同)

Kyl*_*man 6

在接口或抽象类中包含属性是完全有效的.