在使用界面时如何实现私有的setter?

时间:2013-08-15 09:35:18

标签: c# asp.net interface getter-setter

我创建了一个包含一些属性的界面。

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

{get; private set; }

但是,在使用界面时不允许这样做,所以可以实现这一点,如果是这样的话?

2 个答案:

答案 0 :(得分:218)

在界面中,您只能为您的媒体资源{/ 1}定义

getter

但是,在您的课程中,您可以将其扩展为interface IFoo { string Name { get; } } -

private setter

答案 1 :(得分:22)

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

public interface IBar
{
    int Foo { get; }    
}

私人设定者不是公共API的一部分(与任何其他私有成员一样),因此您无法在界面中定义它。但是您可以自由地将任何(私有)成员添加到接口实现中。实际上,无论setter是实现为公共还是私有,或者是否有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