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

时间:2009-09-06 21:42:17

标签: c# inheritance access-modifiers

我想在属性

上有一个具有不同访问修饰符的对象的多个版本

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

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 个答案:

答案 0 :(得分:14)

继承真的适合这里吗? UserInfo类的用户不需要知道子类型。在这种情况下,当给定Password实例而不是ReadUserInfo实例时,用户需要知道UserInfo属性在某种程度上不可用。

这真的没有意义。

编辑:在OO设计中,这被称为Liskov Substitution Principle

答案 1 :(得分:4)

您可以使用新修饰符:

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; }
}