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

标签 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
}

这是我可以实现的东西还是我必须以更编程的方式控制访问?

最佳答案

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

这真的没有意义。

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

关于具有继承性的 C# 访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386797/

相关文章:

c++错误使用模板继承baseClass

java - 方法注解继承

c++ - 非公共(public)类型的公共(public)别名

MVC 中的 Javascript 函数

c - 如何实现继承: error: conflicting declaration ‘typedef struct

c# - 编码实践 - 使用抽象或私有(private)构造函数

java - 在 Util 类中拥有私有(private)静态字段是不是很糟糕?

c# - 按时间顺序获取最新 x 条目的最佳方式

c# - 检测应用关闭

c# - 最后从字符串中删除标点符号