在使用接口时如何实现私有setter?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我用一些属性创建了一个接口。

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

{get; private set; }

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

提问于
用户回答回答于

在界面中,您只能getter为您的财产定义

interface IFoo
{
    string Name { get; }
}

然而,在你的类,你可以扩展它有private setter-

class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}
用户回答回答于

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

public interface IBar
{
    int Foo { get; }    
}

私有setter不是公共API的一部分(与任何其他私有成员一样),因此您无法在界面中定义它。但是你可以自由地添加任何(私人)成员来实现接口。实际上,二传手是以公立还是私人的方式实施,或者是否有二传手:

 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

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问5 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问2 回答

扫码关注云+社区

领取腾讯云代金券