代码之家  ›  专栏  ›  技术社区  ›  Kelly Robins

具有继承的C#访问修饰符

  •  4
  • Kelly Robins  · 技术社区  · 17 年前

    我希望一个对象有多个版本,属性上有不同的访问修饰符

    例如,我可能有一个用户类-

    public abstract class UserInfo
    {
        internal UserInfo()
        {
        }
        public virtual int ID { get; set; }
        public virtual string Password { internal get; set; }
        public virtual string Username { get; set; }
    }
    
    public class ReadUserInfo : UserInfo 
    {
        internal ReadUserInfo()
        {
        }
        override public int ID { get; internal set; }
        override internal string Password { get; set; }
        override public string Username { get; internal set; }
    }
    
    public class NewUserInfo : UserInfo
    {
        internal NewUserInfo()
        {
            ID = -1;
        }
         //You get the Idea
    }
    

    这是我可以实现的,还是我必须以更程序化的方式控制访问?

    2 回复  |  直到 17 年前
        1
  •  14
  •   Nader Shirazie    17 年前

    UserInfo 类不需要知道子类型。在这种情况下,用户需要知道 Password 当给定某个属性时,该属性不知何故不可用 ReadUserInfo 实例而非a 用户信息 例子

    这真的没有意义。

    编辑:在面向对象设计中,这被称为 Liskov Substitution Principle

        2
  •  4
  •   manji    17 年前

    您可以使用新的修饰符:

    public class ReadUserInfo : UserInfo
    {
        internal ReadUserInfo()
        {
        }
        new public int ID { get; internal set; }
        new internal string Password { get; set; }
        new public string Username { get; internal set; }
    }