我有一个基类,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;}
}
我知道代码不起作用,但它可能会让你知道后面的内容
谢谢!
答案 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)