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

发布于 2024-08-03 22:55:47 字数 702 浏览 6 评论 0原文

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

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

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
}

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

I'd like to have multiple versions of an object with different access modifiers on the properties

For example I might have a user class-

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
}

Is this something I can implement or do I have to control access in a more programmatic fashion?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月亮坠入山谷 2024-08-10 22:55:47

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

这确实没有道理。

编辑:在面向对象设计中,这被称为里氏替换原则

Is inheritance really the right fit here? Users of the UserInfo class shouldn't need to be aware of the subtypes. In this case, users would need to know that the Password property is somehow unavailable when given a ReadUserInfo instance rather than a UserInfo instance.

This really doesn't make sense.

Edit: In OO design, this is known as the Liskov Substitution Principle

暮色兮凉城 2024-08-10 22:55:47

您可以使用新的修饰符:

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

you can use the new modifier:

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; }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文