0

私は3つのモデルを持っています。最初のモデルは同じプロパティを持ちますが、クラス名は異なります。RelationshipTypeIDドロップダウンリストの選択を選択して、父の母に基づくビューからデータベースに値を挿入する必要があります。だから私は母/父のための共通の見解を作成しました. ここで私の意図は、親モデルを使用して母/父の情報を挿入することです。

public class Mother
{
    public int MotherID { get; set; }
    public string FirstName { get; set; }
    public string SSN { get; set; }
    //---.etc.
}

public class Father
{
    public int  FatherID { get; set; }
    public string FirstName { get; set; }
    public string SSN { get; set; }
    //---.etc.
}
public class Parent
{
    public int RelationshipTypeID { get; set; }
    public int ParentID { get; set; }
    public string SSN { get; set; }
    //---.etc.
}

プロパティをループせずに型キャストのように使用することは可能ですか?

if (parent.RelationshipTypeID == 1)
{
Mother m = (Mother)parent;
db.MotherRepository.Add(m);
db.SaveChanges();
}
if (parent.RelationshipTypeID == 1)
{
Mother m = (Mother)parent;
db.MotherRepository.Add(m);
db.SaveChanges();
}
4

3 に答える 3

0

あなたはこれを行うことができます:

public class Parent
{
    public int ParentID { get; set; }
    public string SSN { get; set; }
    //---.etc.
}

public class Mother : Parent
{
}

public class Father : Parent
{
}

その後:

var List<Parent> parents = new List<Parent>();
parents.Add(new Mother());
parents.Add(new Mother());
parents.Add(new Father());
parents.Add(new Father());
parents.Add(new Father());

foreach(var parent in parents)
{
    if(parent is Mother)
    {
        SaveParentAsMother(parent);
    }

    if(parent is Father)
    {
        SaveParentAsFather(parent);
    }
}

または、特定のコードを使用して Mother と Father に Save 関数を実装することにより、ポリモーフィズムを使用します。

public abstract class Parent
{
    public int ParentID { get; set; }
    public string SSN { get; set; }
    public abstract void Save();
    //---.etc.
}

public class Mother : Parent
{
    public override void Save()
    {
         // Save mother details
    }
}

public class Father : Parent
{
    public override void Save()
    {
         // Save father details
    }
}

foreach(var parent in parents)
{
    parent.Save();
}

追加

あなたのコメントから、基本クラス オブジェクトに基づいて派生オブジェクトのインスタンス化を行う方法を探していることが分かります。

class Mother : Parent
{
    public Mother(Parent parent)
    {
        this.SSN = parent.SSN;
        this.Name = parent.Name;
    }
}

このようにして、次のように Parent オブジェクトから Mother オブジェクトを作成できます。

var mother = new Mother(someParent);

私の意見では、これはかなり見苦しく、親のインスタンスをまったく使用しない方がよいという事実を強調していることに注意してください。オブジェクトとしてではなく、抽象化として Parent を使用します。

abstract class Parent
{
}

これにより、Parent をインスタンス化することはできなくなりますが、Mother と Father が同じ基本クラスで共有する動作と状態を設定することはできます。

于 2013-11-11T14:57:50.167 に答える