2017-09-27 5 views
0

私は2つの画面間で共通のロジックを共有したいので、PXGraphから継承した抽象クラスと、この抽象クラスから継承する2つの異なるグラフを継承したいと思います。複数の時間からPXGraphから派生する

namespace LE 
{ 
    public abstract class ICarrySomeLogic : PXGraph<ICarrySomeLogic> 
    { 
     // common business logic 
    } 

    public class graph1 : ICarrySomeLogic 
    { 
     // specific business logic 
    } 

    public class graph2 : ICarrySomeLogic 
    { 
     // specific business logic 
    } 
} 

それが正常に動作します:このように

?それを行うための「ベストプラクティス」や別の適切な方法がありますか?

ありがとう、

答えて

0

私は前にこれを行い、素晴らしい作品です。ここに私の例が簡略化されています...

public abstract class MyGraphBase<TGraph, TPrimary, TWhere> : PXGraph<TGraph, TPrimary> 
    where TGraph : PXGraph 
    where TPrimary : class, IBqlTable, new() 
    where TWhere : class, IBqlWhere, new() 
{ 
    public PXSelect<TPrimary, TWhere> document; 
} 

public class GraphOneEntry : MyGraphBase<GraphOneEntry, MyDac, Where<MyDac.docType, Equal<DocType.typeOne>>> 
{ 
} 

public class GraphTwoEntry : MyGraphBase<GraphTwoEntry, MyDac, Where<MyDac.docType, Equal<DocType.typeTwo>>> 
{ 
} 

私の基本的な抽象クラスのイベントが発生し、必要に応じて他のグラフでオーバーライドできます。

私はバージョン5.3

+0

ありがとう、これは少しクリーナーを作るための解決策はありますか?私のTWhereはかなり長いですか?パブリッククラスProcessLettrage:ProcessLettering 、イコール、 と<現在の、 。 .. >>>>> – Maxime

+0

プライマリビュー(この例のドキュメント)は両方のグラフで同じですか? – Brendan

+0

TPrimaryは同じではありません.1つはARRegisterでもう1つはAPRegisterですが、後ろの論理は同じです。 – Maxime

0

ので、あなたが必要とする何をすべきを与えている例を、これを使用しています。抽象クラスの継承可能な特性や動作は、期待どおりサブクラスに継承されます。拡張クラスでも同様です。既存のグラフを拡張する場合、継承を達成するために拡張クラスをサブクラス化できます。

注:タイプ命名用の「I」接頭辞は、クラスではなくインタフェース用のC#の標準です。抽象クラスはインタフェースといくつかの類似点を持っていますが、それらは同じではありません。マイクロソフトのベストプラクティスに従う場合は、この接頭辞をクラスの命名に使用しないことを検討してください。あなたのIプレフィックスが単に "I"(あなた自身のように)という意味であれば、このメモを無視することができます。 :)

関連する問題