2016-11-24 3 views
0

冗長なメソッドやオブジェクトのコピー、リファレンスやその他の不正なハッキングを使わずに、ベースクラスと派生クラス間でオブジェクトの作成ロジックを分割する方法は? これは例です。私は詳細を書く必要があります。私は詳細を書く必要があります。詳細。返されたオブジェクトの作成ロジックをC#で基底クラスと派生クラスの間でどのように分割するのですか?

public abstract class Base 
{ 
    protected int Property1; 
    protected int Property2; 

    public View GetView() 
    { 
     View view = new View(); 
     view.Property1 = Property1.ToString(); 
     view.Property2 = Property2.ToString(); 
     return view; 
    } 
} 

public class Derived1 : Base 
{ 
    int Property3; 

    public override View GetView() 
    { 
     View1 view = new View1(); 
     view.Property3 = Property3.ToString(); 
     //return view; 
     //return base.GetView(); 
     //return view UNION base.GetView(); ??? 
    } 
} 

public class Derived2 : Base 
{ 
    int Property4; 

    public override View GetView() 
    { 
     View2 view = new View2(); 
     view.Property4 = Property4.ToString(); 
     //return ??? 
    } 
} 

public abstract class View 
{ 
    public string Property1; 
    public string Property2; 
} 

public class View1 : View 
{ 
    public string Property3; 
} 

public class View2 : View 
{ 
    public string Property4; 
} 

ありがとうございます。

+0

'View1'と' View2'は接続されていますか?たとえば、同じインタフェースを実装していますか? – nvoigt

+0

"私は詳細を書く必要があります。詳細を書く必要があります。少ないカフェイン。あなたの例があまりにも曖昧であるため、あなたが達成しようとしていることを私は知らない。 –

+0

@novigt Viewから派生したものです。必要に応じてインターフェイスIViewを簡単に実装できます。 – Feofilakt

答えて

0

これは可能です。ビューは、基本設定メソッドに渡され、基本固有のフィールドが設定されます。

public abstract class Base 
{ 
    protected int Property1; 
    protected int Property2; 

    protected void Setup(View view) 
    { 
     view.Property1 = Property1.ToString(); 
     view.Property2 = Property2.ToString(); 
    } 
} 

public class Derived1 : Base 
{ 
    int Property3; 

    public View GetView() 
    { 
     View1 view = new View1(); 
     view.Property3 = Property3.ToString(); 
     Setup(view); 
     return view; 
    } 
} 

public class Derived2 : Base 
{ 
    int Property4; 

    public View GetView() 
    { 
     View2 view = new View2(); 
     view.Property4 = Property4.ToString(); 
     Setup(view); 
     return view; 
    } 
} 
0

私は、ジェネリック医薬品は、あなたが望む正確に何をするのに役立つ可能性があり仮定 - 強く結果と基本クラスからロジックを再利用する機能を入力しました。または、おそらく私はあなたのポイントを逃した

public abstract class Base<T> 
    where T : View 
{ 
    protected int Property1; 
    protected int Property2; 

    public abstract T GetView(); 
} 

public class Derived1 : Base<View1> 
{ 
    int Property3; 

    public override View1 GetView() 
    { 
     View1 view = new View1(); 
     view.Property3 = Property3.ToString(); 
     return view; 
    } 
} 
関連する問題