-2

派生クラスの基本プロパティを設定する最善の方法を教えてくれる人がいるかどうか疑問に思っています。ベースが使用されているか子が使用されているかに関係なく、1 つのメソッドを使用してベースのプロパティを設定したいと思います。

これが私が尋ねていることの例です:

public class Parent
{
     public string Id {get; set;}
}

public class Child : Parent
{
     public string Name {get; set;}
}

public Parent GetParent(int ID)
{
     Parent myParent = new Parent();
//Lookup and populate
return Parent;
}

public Child GetChild(string name)
{
Child myChild = new Child();

//Use the GetParent method to populate base items
//and then  
//Lookup and populate Child properties

return myChild;
}
4

3 に答える 3

2

物事を少し複雑にしすぎているのではないかと思います。継承とコンストラクターを使用してオブジェクトを初期化する次のコードを見てください。

public class Parent
{
    public string Id {get; set;}

    public Parent(string id)
    {
        Id = id;
    }
}

public class Child : Parent
{
    public string Name {get; set;}

    public Child(string id, string name) : base(id) // <-- call base constructor
    {
        Name = name;
    }
}

初期化にコンストラクターを使用し、base キーワードを使用して派生クラスから親コンストラクターを呼び出します。ファクトリメソッドでオブジェクトを構築する必要が本当にない限り、私はこの方向に進みます。

于 2013-02-21T15:57:59.047 に答える
1

でやりたくない場合は、このようなものconstructor

注:constructor特に、特定のシリアライザーを使用して型が希望化されている場合は、が常に呼び出されるとは限りません。

public class Parent
{

     public string Id {get; set;}

     public virtual void InitPorperties() {
        //init properties of base
     }

}


public class Child : Base {

    public override void InitProperties() {
        //init Child properties
        base.InitProperties();
    }
}

この後、次のように使用できます。

public Parent GetParent(int ID)
{
     var myParent = new Parent();
     parent.InitProperties();
     return myParent;
}

public Parent GetChild(int ID)
{
     var  child= new Child();
     child.InitProperties();
     return child;
}

コインの裏側があるのと同じように、呼び出し元は、InitProperties正しく初期化されたオブジェクトを取得するために、オーダーでメソッドを呼び出す必要があります。

シリアル化/非シリアライズが問題にならない場合は、コンストラクターを使用してください。実際には、すべてのタイプのctor内でこのメソッドを呼び出します(ParentChild

于 2013-02-21T15:55:03.123 に答える
1

標準的な方法を使用したくない場合は、

   Child myChild = new Child();
    myChild.Name = "name";
    myChild.Id = "1";

このようにコンストラクターを介してそれらを設定できます。

    public class Parent
    {
        public Parent(string id)
        {
            Id = id;
        }

        public string Id { get; set; }
    }

    public class Child : Parent
    {
        public Child(string id, string name)
            : base(id)
        {
            name = Name;
        }

        public string Name { get; set; }
    }

そして、あなたがそれを否定するとき

     Child myChild = new Child("1", "name");

私の意見では、これは非常にきちんとした方法です。

于 2013-02-21T15:58:18.223 に答える