使用带有方法签名/事件等的接口对我来说非常有意义。
但是,我无法找到仅使用properties
的接口的用例。 (我知道属性是引擎盖下的方法,它们是封装的,您可以在get/set accessor
等上编写一些代码。
我背后的是use case
用于具有类似fields. (just get and set values)
的属性的接口。
例如,如果我有方法接口,我可以在运行时使用不同的实现,使用多态性有优势,基于接口契约传递不同的实现,并且我更容易模拟单元测试。但如果我有一个类,我知道它只包含属性(如DTO)。 为什么我要为DTO类创建一个接口?有没有用例?
我标记了java,因为这不是一个技术问题,他们有类似于get / set访问器的mutator方法。
感谢。
答案 0 :(得分:1)
事实证明,框架中有相当多的接口只包含属性,例如System.IAsyncResult。您可以通过浏览MSDN找到其他用例。
恕我直言,与方法相比,属性没有什么特别之处。您可以始终将R / W属性转换为一对Get / Set方法,并将R / - 属性转换为Get方法,反之亦然。由纯属性组成的接口的决定应该在与#34; normal"相同的过程中进行。接口答案 1 :(得分:0)
接口中的属性与接口的其他部分具有相同的用例 - 它们提供了与实现该接口的类型进行交互的通用接口。
请注意,接口中的属性与类中的属性不同。
interface IInterface
{
int Foo { get; }
}
class Class
{
int Foo { get; set; }
}
在此代码中,IInterface.Foo
不是自动实现的属性,而Class.Foo
是。{1}}。
BCL中的示例包括:
// Get the count of items of any ICollection implementation,
// including (not limited to) List<T>, Dictionary<TKey, TValue>,
// and HashSet<T>
int ICollection<T>.Count { get; }
// gets the current element of any implementation of IEnumerator<T>
T IEnumerator<T>.Current { get; }
答案 2 :(得分:0)
接口在许多设计模式中扮演着重要角色控制反转,依赖性反转等等。我们可以使用继承,但如果存在违反is-a关系的话,我们可能会去实现。