首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用接口时,如何实现私有setter?

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

Stack Overflow用户
提问于 2013-08-15 17:35:18
回答 2查看 40.9K关注 0票数 152

我已经创建了一个具有一些属性的接口。

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

代码语言:javascript
复制
{ get; private set; }

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-15 17:37:07

在接口中,您只能为属性定义getter

代码语言:javascript
复制
interface IFoo
{
    string Name { get; }
}

但是,在您的类中,您可以将其扩展为具有private setter -

代码语言:javascript
复制
class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}
票数 300
EN

Stack Overflow用户

发布于 2013-08-15 17:38:41

接口定义了公共API。如果公共API仅包含getter,则仅在接口中定义getter:

代码语言:javascript
复制
public interface IBar
{
    int Foo { get; }    
}

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

代码语言:javascript
复制
 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不是接口的一部分,因此无法通过接口调用:

代码语言:javascript
复制
 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
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18249981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档