为什么接口中有一个属性?我知道接口是一种合同,但为什么您需要接口中的属性?非常感谢
5 回答
那么让我们假设接口表示对象的集合。
进一步假设我们想知道有多少对象。
多田!我们使用一个属性int Count {get;}
从技术上讲,您永远不需要属性,因为您总是可以编写一个SetX()
和一个GetX()
方法。所以说你永远不需要一个是真的。
但是,有些框架使用反射来查找属性,尤其是那些进行序列化和反序列化的框架。在这些情况下,确实需要属性。
实际上,属性通常比方法更具可读性,并且正确使用它们应该传达额外的信息,例如“读取这个值不会很昂贵”和“读取这个值不会引起可观察到的副作用”。(这两个都应该适用于正确实现的属性获取器。)
属性是GetSomething()
/SetSomething()
方法的快捷方式,这些方法在我们称为接口的“合同”中非常常见。
不要将属性误认为字段(公共成员变量) - 属性通常表示某种行为,如果您在接口中呈现该行为,您可以在实现类中放置简单的支持字段或更复杂的东西。
这只是为了方便。属性被设计为替代 getter 和 setter(方法如getSomething
和setSomething
)。
例如,我们可以重写这个 java 代码:
interface Foo
{
Bar getBar();
void setBar(Bar bar);
}
...在 C# 中为:
interface Foo
{
Bar Bar { get; set; }
}
因为事物有共同的属性。
每个类如何实现它们的属性取决于它们。有些可以使用自动属性,有些可以查询数据库。
属性(get
和/或set
)、事件(add
和remove
)和索引器(get
和/或set
)都由一个或两个访问器组成。访问器几乎就像一个方法,它只是属于一个更专业的类型成员。
引用 MSDN Interfaces (C# Programming Guide):
接口包含类或结构可以实现的一组相关功能的定义。[...]
[...]
接口可以包含方法、属性、事件、索引器或这四种成员类型的任意组合。[...]
我想你开始阅读上面的参考资料。