setter,用于未在接口中定义的属性

时间:2009-08-28 20:30:46

标签: c# interface

如果我的界面只有getter的签名,例如:

public interface IInterface 
{
   object Id{get;}
}

因此,接口只在任何已实现的类上指定Id的公共getter 现在当我上课时:

public class Simple : IInterface
{
  object Id
  {
    get{return something;} 
    set{ do something else;}
  }
}

编译器抱怨setter,因为接口中没有定义setter。但是我并没有就限制器的接口合同做出任何规定;为什么界面坚持派生类的setter?

2 个答案:

答案 0 :(得分:11)

你只需要公开我的ID。例如,这编译很好:

public interface IInterface
{
    object Id { get; }
}
public class Simple : IInterface
{
    private int something;
    public object Id
    {
        get { return something; }
        set{ something = (int)value;}
    }
}

答案 1 :(得分:1)

在设计.net时,Microsoft决定使三种不可互换的属性类型:只读,只写和读写。在C#中,如果声明一个读写属性与一个或多个应该实现的接口属性同名,编译器不仅可以自动创建程序员实际指定的读写属性,而且只读和/或者只需要满足接口的只写属性。例如,如果接口IReadableFoo实现只读属性Foo,则IWritableFoo实现只写属性Foo,IReadWriteFoo继承IReadableFoo和IWritablefoo,并实现“新”读写属性Foo,类ReadWriteFoo实现IReadWriteFoo并声明一个公共读写属性Foo,编译器将具有ReadWriteFoo生成只读属性IReadableFoo.Foo,只写属性IWritableFoo.Foo和读写属性IReadWriteFoo.Foo的接口实现。