2012-01-09 13 views
0

は、私は私は例えば、私が作ったオブジェクトのインスタンスを渡しする動的メソッドを作りたかった:オブジェクトから値を抽出しますか?

public class Employee() 
{ 
    public string FName; 
    public string SName; 
    .....etc. 
} 

私が欲しいの方法は、以下のようなものです:

public void methodName(Object oObject) 
{ 
    //lets say that i have passed object employee to it. 
} 

それはすることが可能ですoObjectから任意の値を抽出していますが、そうしようとしましたが、そうする属性がなく、時計に入れたときに、そのクラスemployeeのすべての属性をacutally見ることができます。

これはなんですか?

+0

各オブジェクトの特定のプロパティの値を指定しますか? –

+0

いいえ、私は全体のオブジェクトをしたい – ykh

答えて

1

のようなバックEmployeeクラスにオブジェクトをキャストすることにより、入力した値にアクセスすることができます。

更新:あなたはオブジェクト全体が必要だと言います。 Castingまたはプロパティを公開するためのインターフェイスが道筋です。

あなたは、特定の型にオブジェクトをキャストすることができます:あなたが使用することができます

public interface IFirstName 
{ 
    string FName { get; } 
} 

public void methodName(IFirstName objectWithFirstName) 
{ 
    string name = objectWithFirstName.FName; 
} 

:あなたはメソッドが予期するものと定義するインターフェイスを公開することができ

if (oObject is Employee) 
{ 
    string name = (oObject as Employee).FName; 
} 

、その後、提供のタイプはインタフェースを実装dynamicと実行時のベストヒット(.NET 4):

public void methodName(dynamic oObject) 
{ 
    string name = oObject.FName; 
} 

それから反射があります。

しかし、より良い質問は、これは良い方法ですか?私は何かを取ってものを期待する方法については少し懐疑的だろうが、それは起こらない、あるいは起こるべきではないと言っているわけではない。

+0

私が達成しようとしているのは、各クラスのSqlDataReaderのメソッドを作成するのではなく、単にオブジェクト参照とプロシージャ名を送信し、塗りつぶしオブジェクトを返すことです。 – ykh

+0

@ user733659私はそれを行う方法は、それぞれのオブジェクトが実際に読み取り/書き込み自体を担当するように、各クラスが読み書きメソッドが要求するインターフェイスを定義することです。どちらか、またはリフレクション名とプロパティ名を使用していますが、これは少しフレークになります。 –

+0

あなたは私にリファレンスまたは小さな例を教えてもらえますか?ありがとう。 – ykh

1

はい、あなたは、単に多くの方法がありますが、この

public void methodName(Object oObject) 
    { 
     //lets say that i have passed object employee to it. 
     //if oObject belongs to Employee class 
     if(oObject is Employee) 
     { 
      Employee employee = oObject as Employee; 
      //you can get access values here 
     } 
    } 
+0

'as'だけを使用して、nullでemployeeをテストするべきです。 '従業員=従業員としてのoObject; if(employee!= null){} ' – meziantou

+0

@meziantou実際に' if(oObject is Employee) 'はヌルをフィルタリングします。ヌルオブジェクト参照はobject以外の型を持たないからです。 –

関連する問題