158

我创建了一个带有一些属性的界面。

如果接口不存在,类对象的所有属性都将设置为

{ get; private set; }

但是,在使用接口时这是不允许的,那么这可以实现吗?如果可以,如何实现?

4

2 回答 2

308

在界面中,您只能getter为您的属性定义

interface IFoo
{
    string Name { get; }
}

但是,在您的课程中,您可以将其扩展为private setter-

class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}
于 2013-08-15T09:37:07.497 回答
31

接口定义了公共 API。如果公共 API 只包含 getter,那么您在接口中只定义 getter:

public interface IBar
{
    int Foo { get; }    
}

私有 setter 不是公共 api 的一部分(与任何其他私有成员一样),因此您不能在接口中定义它。但是您可以自由地将任何(私有)成员添加到接口实现中。实际上,setter 将被实现为 public 还是 private,或者是否会有 setter 并不重要:

 public int Foo { get; set; } // public

 public int Foo { get; private set; } // private

 public int Foo 
 {
    get { return _foo; } // no setter
 }

 public void Poop(); // this member also not part of interface

Setter 不是接口的一部分,因此不能通过您的接口调用它:

 IBar bar = new Bar();
 bar.Foo = 42; // will not work thus setter is not defined in interface
 bar.Poop(); // will not work thus Poop is not defined in interface
于 2013-08-15T09:38:41.340 回答