有没有人知道使用仅具有属性的接口的任何用例?

时间:2015-09-11 02:31:46

标签: java c# design-patterns interface solid-principles

使用带有方法签名/事件等的接口对我来说非常有意义。

但是,我无法找到仅使用properties的接口的用例。 (我知道属性是引擎盖下的方法,它们是封装的,您可以在get/set accessor等上编写一些代码。

我背后的是use case用于具有类似fields. (just get and set values)的属性的接口。

例如,如果我有方法接口,我可以在运行时使用不同的实现,使用多态性有优势,基于接口契约传递不同的实现,并且我更容易模拟单元测试。但如果我有一个类,我知道它只包含属性(如DTO)。 为什么我要为DTO类创建一个接口?有没有用例?

我标记了java,因为这不是一个技术问题,他们有类似于get / set访问器的mutator方法。

感谢。

3 个答案:

答案 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关系的话,我们可能会去实现。