接口声明属性而不是方法是否可以接受?

时间:2009-05-30 19:55:55

标签: .net oop interface

接口是否可以声明属性而不是方法?
哪个更优选?
interface ITaggable {string GetTag(); } 或
interface ITaggable {Tag {get;}}

生活在.Net世界。

6 个答案:

答案 0 :(得分:7)

绝对。在接口中使用与在类中完全相同的属性。

框架中的示例包括IEnumerator<T>.CurrentICollection<T>.Count

答案 1 :(得分:2)

在这种情况下使用属性是完全可以的。当你真正得到一个值时,我更喜欢使用属性而不是GetFoo()方法。

答案 2 :(得分:2)

在这种情况下,属性绝对是首选。

答案 3 :(得分:1)

属性和方法之间的通常区别(至少我使用的那个,我真的希望它是“通常”:))仍然适用。

如果通过命名标识符(属性或方法)从对象获取数据的行为是:

  • 昂贵的操作(即它可能会查询数据库)
  • 或具有副作用的操作(即,它可能会更改内部字段)

...那么它应该是一种方法。

如果操作重量轻,没有副作用,则可以是属性。

因此,阅读一个人的名字是一个属性,因为该值可能应该在对象中开始。

然而,要弄清楚他在系统中有多少订单,这应该是一种方法,因为它可能需要做更昂贵的操作。

至少这是我使用的标准。

无论是班级还是界面,在这方面对我没有任何影响。

在您的具体情况下,我会去酒店。 “可标记”项目应该知道其标记。

答案 4 :(得分:0)

如果预期的实现语言支持属性,那么在您的界面中使用它们也是完全正确的(如果您的预期目标是一种语言,您当然必须坚持使用getter / setter访问器)缺乏对财产的支持。)

答案 5 :(得分:0)

我相信如果你试图声明一个只读属性(即使没有私有的setter),编译器会建议你使用一个方法。

至于真正的选择,这是一个特殊情况,你的编码风格和你所遵循的设计方法。