4

我想要一个对象的多个版本,在属性上具有不同的访问修饰符

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

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
}

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

4

2 回答 2

14

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

这真的没有意义。

编辑:在 OO 设计中,这被称为Liskov 替换原则

于 2009-09-06T22:22:37.313 回答
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; }
}
于 2009-09-06T21:48:57.690 回答