代码之家  ›  专栏  ›  技术社区  ›  TerrorAustralis

隐藏集合访问器

c#
  •  2
  • TerrorAustralis  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  1
  •   Mark Byers    14 年前

    不,你把你的阶级继承权搞错了。

    可写版本应该是只读版本的子类。有一种方法可以做到:

    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
  •  2
  •   ScottS    14 年前

    你不能就这样删除一个公共成员,否则它会破坏任何试图把Foo对象当作FooBase对象的东西。

    你可以这样做:

    public virtual string Name{get; protected set;}