【发布时间】:2012-11-06 09:04:09
【问题描述】:
考虑如下界面
public interface ICustomData
{
String CustomData { set; get; }
}
根据 MSDN 文档,接口成员自动公开。
假设我现在想实现我的接口:
public class CustomDataHandler : ICustomData
{
}
这会在编译时中断,告诉我我没有实现“CustomData”
另一方面,这会起作用:
public class CustomDataHandler : ICustomData
{
public String CustomData { set; get; }
}
我的问题是:如果接口的成员自动公开,为什么我必须在类中声明实现?如果接口声明在语法上与类声明相同,为什么编译器不能从我的接口中自动推断出来?
编辑:
我问的原因。想象一下您正在构建数据模型、实体等的场景。我可能会为这些模型编写一些接口,如下所示:
public interface IUserAccount
{
Guid Identity { set; get; }
String FirstName { set; get; }
String LastName { set; get; }
String EmailAddress { set; get; }
String Password { set; get; }
}
public interface IUserDataEntry
{
Guid DataIdentity { set; get; }
String DataName { set; get; }
String Data { set; get; }
}
这样构建模型会简单得多:
public class UserAccount : IUserAccount
{
}
public class UserDataEntry : IUserDataEntry
{
}
public class Combined : IUserAccount, IUserDataEntry
{
}
【问题讨论】:
-
它可能可以,但这会让你编写可读性差的代码。
-
寻找抽象类,它们可能就是你想要的。
-
@Bgi,你能解释一下它是如何导致代码可读性差的吗?我个人认为代码会更整洁,因为您可以只查看类实现的接口而不是类本身。此外,实现和契约在语法上是相同的,因此您只需要在接口中维护属性,而不是在类中。
-
@trampi,不,C# 只允许单继承,所以抽象类也不起作用!
标签: c# .net interface compilation