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が与えられたときにプロパティが何らかの理由で利用できないことを知る必要があります。 ReadUserInfoUserInfo

これは本当に意味がありません。

編集: OO 設計では、これはLiskov Substitution Principleとして知られています。

于 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 に答える