2011-07-09 6 views
3

私は多くのプロパティを持つオブジェクト(A)を持っています。私はいくつかの新しいプロパティでオブジェクトAを拡張する新しいオブジェクトBを作成します。その後C#の継承。ベースオブジェクトのコピープロパティ

私は、オブジェクトAのインスタンスを返すメソッドのAAを持っていますが、私の現在のメソッドBBに私は、オブジェクトBの新しいインスタンスを使用し

は、私は、メソッドAAのリターンを使用する方法はありますかオブジェクトB?を割り当てるには、プロパティにコピープロパティを避けるためにBにどのように割り当てますか?

class A 
{ 
    string a1 {get; set;} 
    // ... 
    string a50 {get; set;} 
} 

class B: A 
{ 
    string bState {get; set;} 
    string bMessage {get; set;} 
} 

class ObjAA 
{ 
    public static AA ReturnAA() 
    { 
     AA oAA = new AA(); 
     //... 
     return oAA; 
    } 
} 

class ObjBB 
{ 
    public void UseBB() 
    { 
     BB oBB = new BB(); 

     var aa = ObjAA.ReturnAA(); 

     // How do I assign to B avoiding property by property? 
    } 
} 

おかげAutoMapperよう

+0

@Avada Kedavra。ありがとう、私は例を修正しました –

+0

気づいて削除しました:) –

答えて

1

Marc Gravell mentions片道ですが、これは問題ありません。

もう1つは、メソッドがBのインスタンスを返すようにすることです。どうやって?ジェネリック薬を使用する。

class ObjAA { 
    public static T ReturnA<T>() where T : A, new() { 
     T oAA = new T(); 
     // fill the properties of A 
     return oAA; 
    } 
} 

そして:ここ

class ObjBB 
{ 
    public void UseBB() 
    { 
     var bb = ObjAA.ReturnA<B>(); 
     // bb is a B, and the properties it inherits from A are filled 
    } 
} 
2

ツールは、類似したオブジェクトタイプ間のスイッチのこのタイプのを助けることができます。

1

は、ベース、ベースを拡張オブジェクトにプロパティオブジェクトをコピーする方法です。

派生型として基本型を使用する必要がある場合には、残念ながら次のコードを使用します。はい、それはLiskov Substitution Principle(LSP)の違反です。ほとんどの場合、継承以上の構成に有利です。 Markus Knappen Johanssonへの小道具。基本クラスで

このコード:

public T As<T>() 
    { 
     var type = typeof(T); 
     var instance = Activator.CreateInstance(type); 

     if (type.BaseType != null) 
     { 
      var properties = type.BaseType.GetProperties(); 
      foreach (var property in properties) 
       if (property.CanWrite) 
        property.SetValue(instance, property.GetValue(this, null), null); 
     } 

     return (T) instance; 
    } 

ができます

derivedObject = baseObect.As<derivedType>() 

それは反射を使用するので、それは "高価" です。それに従って使用してください。