1

私のアプリケーションにはn層アーキテクチャがあります。さまざまなレイヤーがあります(ビジネスロジックとデータリンクとGUI)。いくつかの一般的なクラスを使用して、あるレイヤーから別のレイヤーにデータを渡します。RetrnValueCls変数Return valueとが2つしかないクラス(say )がありReturn Messageます。あるレイヤーから別のレイヤーにデータを渡すときに、このクラスを他の変数を持つ他Return Valueのクラス(たとえば)と一緒に返す必要があります。MasterItemsCls

以下はその方法です

public MasterItemsCls GetMasterItemsMDL()
{
    /* Does some computations and assign them to
    attributes of MasterItemsCls and pass it other methods in other layers. */
}

public ReturnValueCls GetMasterItemsMDL()
{
    /* Does some computations and assign them to
    attributes of ReturnValueCls and pass it other methods in other layers. */
}

上記の両方のclasses(MasterItemsClsReturnValueCls)をメソッドの戻り型としてGetMasterItemsMDL一度に返したいのですが、両方のクラスを組み合わせたくありません。それができる方法があれば教えてください。

4

4 に答える 4

7

関数は単一の値しか返すことができないので、その意味で答えはノーです。

関数はoutパラメーターを持つことができるので、パラメーターを介して2つの値のいずれかを返すことができoutます。

私の意見では、これを処理する最もクリーンな方法は、3番目のクラスを使用して他の2つを含めることです。 Tuple<T1,T2>その目的に使用できます:

public Tuple<MasterItemsCls, ReturnValueCls> MyFunction()
{
    // Do stuff
    return new 
    Tuple<MasterItemsCls, ReturnValueCls>(myMasterItemsCls, myReturnValueCls);
}

の欠点の1つTuple<T1,T2>は、値がかなり直感的ではなく、としてアクセスされることItem1ですItem2

を使用したくない場合は、とTuple<T1,T2>を含む独自のクラスを簡単に作成できます。それが私の好ましいアプローチです。MasterItemsClsReturnValueCls

于 2013-03-15T16:44:12.577 に答える
6

両方のクラスを組み合わせる必要はありませんが、可能な直接的なアプローチは、返そうとしている各クラスの1つのインスタンスを含むクラスを生成することです。

public class YouClassName
{
     public MasterItemsCls MasterItemsCls {get; set;}
     public ReturnValueCls ReturnValueCls {get; set;}
}
于 2013-03-15T16:43:24.820 に答える
0

メソッドは1つのオブジェクトのみを返すことができます。これらの他のそれぞれのインスタンスを持つ他のクラスを作成することもできます。

于 2013-03-15T16:44:01.183 に答える
0

ジェネリックスは、return要素のラッパーとして役立つ場合があります。

次のことができます。

public ReturnValueCls<MasterItemsCls> GetMasterItemsMDL()
{

}

戻りReturnValueCls<T>型の型パラメーターが必要です。したがって、retunタイプは、目的のリターンのラッパーとして機能し、リターンメッセージを保持できます。


クラス定義の例。いくつかの制約が必要になる場合があります。

public class ReturnValueCls<T>
{
    public T Value { et; set;}
    public string Message {get; set;}
}   
于 2013-03-15T16:49:30.597 に答える