我想要一个对象的多个版本,在属性上使用不同的访问修饰符
例如我可能有一个用户类-
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
}
这是我可以实现的东西还是我必须以更编程的方式控制访问?
最佳答案
继承真的适合这里吗? UserInfo
类的用户不需要知道子类型。在这种情况下,用户需要知道在给定 ReadUserInfo
实例而不是 UserInfo
实例时,Password
属性在某种程度上不可用。
这真的没有意义。
编辑:在 OO 设计中,这被称为 Liskov Substitution Principle
关于具有继承性的 C# 访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386797/