0

プログラムのレイヤー間を渡すために使用するヘルパークラスがあります。このクラスの特徴の 1 つは、最下層でエラーが発生した場合に返されることです。また、ルーチンに関連付けられたデータをレイヤを介して返します (つまり、データベース テーブル、文字列、整数などを返します)。現在、オブジェクトタイプを介してデータを追加しています。呼び出し先ルーチンは、返されるデータ型を知る必要があります。私の質問は、オブジェクトを返す方法と、それがどのようなデータ型であるかということです。タイプ記述子をどのように保存しますか?

現在、これはどのように実装されているかです:

これは下位レベルの例です (エラーが発生しなかった db ルーチンの場合):

      return new MyHelper()
            .AndAddObjectToReturn(rep)
            .AndHasNoErrors();

そして、これはこれを行う呼び出し先コードにバブルアップします:

        .....
        if (contactidHelped.HaveNoErrors())
        {
            repContact contact = (repContact) contactidHelped.GetAttachedDataObject();
            ....
         }

私がやりたいのは、呼び出し先ルーチンです。データ型が無知で、次のようなコードを実行することです。

        .....
        if (contactidHelped.HaveNoErrors())
        {
            repContact contact = contactidHelped.GetAttachedDataObject();
            ....
         }

期待されるオブジェクトが必要なものになるようにします。

4

2 に答える 2

0

GetAttachedDataObject()たとえば、オブジェクトとして格納するだけで渡すことができます。

var attachedDataObject = contactidHelped.GetAttachedDataObject();

次に、特定のオブジェクトの特定のプロパティまたはメソッドにアクセスする必要がある場合は、次のようにタイプを確認します。

if (attachedDataObject is repContact) {
    // your code here
}

ただし、インターフェイスがどのように機能するかを確認することをお勧めします。おそらく、ニーズにより適しているでしょう。

于 2013-08-07T02:09:34.610 に答える
0

私の知る限り、単純な方法でそれを行うことはできません。同様の動作を実現するために私が考えることができるのは、ヘルパー クラスで型制約を使用することです。

別のクラスを派生させながら、オブジェクト型を返す仮想 GetAttachedDataObject を持つベース ヘルパー クラス (MyHelper としましょう) を作成します -型 T の値を返すMyHelper<T>メソッドを持つ。GetAttachedData<T>

ヘルパーを初期化/インスタンス化するときは、強い型付きをインスタンス化しますMyHelper<T>。呼び出し元で、MyHelper を目的の前もってキャストし、MyHelper<T>GetAttachedDataObject の代わりに GetAttachedData を呼び出すことができます。もちろん、ニーズに合わせてこれをさらに微調整することもできます。

しかし、これも理想的ではありません。キャストの必要性を減らすことができると思いますが、ある時点でキャストを行う必要があります。

于 2013-08-07T02:01:42.180 に答える