我想在属性
上有一个具有不同访问修饰符的对象的多个版本例如,我可能有一个用户类 -
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
}
这是我可以实现的,还是我必须以更加程序化的方式控制访问?
答案 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; }
}