为什么接口不包含属性

时间:2016-05-09 21:27:15

标签: c# interface

我希望实施一个电子邮件库,该电子邮件库会发送包含ToFromMessage的基本SMTP电子邮件。我想创建一个Interface,以便我可以切换处理发送邮件的电子邮件服务。

我的问题与创建界面有关。由于处理发送消息的具体类需要一些数据,如ToFromMessage,接口是否也应该具有这些属性呢?

在查看SO和其他文章中的其他示例时,似乎通常不会在Interface中指定属性。那是为什么?

// Interface
public Interface ISendMail
{
  string to {get; set;}
  string from {get; set;}
  string message {get; set;}
  bool SendMessage();
}

而不是......

// Interface
public Interface ISendMail
{
  bool SendMessage();
}

3 个答案:

答案 0 :(得分:4)

  

似乎通常不在接口

中指定属性

那是错的。有很多接口都有属性。以Office插件的互操作接口为例。他们装满了它。

MSDN上甚至有一个完整的主题。

答案 1 :(得分:2)

C#中的接口可以包含属性。从C# Language Specification的第1.9节(强调是我的):

  

接口定义了一个可以通过类和结构实现的契约。 接口可以包含方法,属性,事件和索引器。接口不提供它定义的成员的实现 - 它仅指定必须由实现接口的类或结构提供的成员。

答案 2 :(得分:0)

在界面中拥有属性是完全没问题的。我认为它们是方法(尽管应该是轻量级的)。 例如:

string Message { get; set; }

相当于声明这两种方法

string GetMessage();
void SetMessage(string value);

要添加,没有自动实现的属性,您仍需要为getter和setter提供相应的字段。