界面良好做法

时间:2009-01-22 20:56:11

标签: .net

最好有一个没有方法但只有属性的接口吗?

6 个答案:

答案 0 :(得分:5)

想象一下,我们有两个不同的类,它们不是来自同一个基础:用户和企业。在我们项目的某个时刻,我们决定用户和企业都需要引用地址元素,例如Street1,Street2,City,State和Zip。我们还有一个需要能够直接操作这些值的代理类,无论它们是在哪个类中定义的。

实现这一目标的一种方法是创建一个这样的界面(c#中的示例):

public interface IHasAddress {
  public string Street1 { get; set; }
  public string Street2 { get; set; }
  public string City { get; set; }
  public string State { get; set; }
  public string Zip { get; set; }
}

现在,我们可以在另一个类中使用一个方法来执行以下操作:

public static class Test {
  public static void CheckZip(IHasAddress addressContainer) {
    if (addressContainer == null) return;
    if (addressContainer.Zip == "33314") addressContainer.State = "FL";
  }
}

只要User和Business都实现了IHasAddress接口,下面的代码就会按预期编译并运行:

User user = new User();
Business business = new Business();
Test.CheckZip(user);
Test.CheckZip(business);

这是一个纯粹的理论问题/解决方案,但它确实证明了对这种结构的完美需求。

答案 1 :(得分:2)

接口是否有方法无关紧要。接口公开的成员应该由该接口的客户端的要求驱动。

答案 2 :(得分:1)

如果您打算拥有一组具有相似基本结构的数据对象,这将是有意义的。

答案 3 :(得分:1)

不要忘记,属性只不过是通常命名为get_PropertyName或set_PropertyName的方法。

所以不,我认为只有一个属性的接口没有问题。他们仍然是方法。

答案 4 :(得分:0)

这是Java中常用的方法,可以在获得适当的枚举之前定义一堆相关的常量。

答案 5 :(得分:0)

我认为没有任何问题。如果您的应用程序需要合同来实现一堆属性,那么就这样吧。