隐藏Set访问者

时间:2010-09-23 06:11:25

标签: c#

我有一个基类,FooBase。它有一些标准的读/写属性。当我将其子类化时,我希望子类只具有读取属性。这可能吗?

class FooBase
{
    public virtual int ID{get; set;}
    public virtual string Name{get;set;}
}

class Foo : FooBase
{
   public override int ID {get;}
   public override string Name{get;}
}

我知道代码不起作用,但它可能会让你知道后面的内容

谢谢!

3 个答案:

答案 0 :(得分:2)

你不能只删除那样的公共成员,否则它会破坏任何试图将Foo对象视为FooBase对象的东西。

您可以尝试这样的事情:

public virtual string Name{get; protected set;}

使setter仅对从FooBase派生的类可用。

答案 1 :(得分:1)

没有。你的类层次结构是错误的。可写版本应该是readonly版本的子类。这是你可以做到的一种方式:

class FooBase
{
    public int ID { get; protected set; }
    public string Name { get; protected set; }
}

class Foo : FooBase
{
    public void SetId(int id) { /* ... */ }
    public void SetString(string name) { /* ... */ }
}

答案 2 :(得分:0)