1

型を返すメソッドを作成して使用することはできますか?

たとえば、Person 型と Object パラメーターがあるとします。おそらくご存じのとおり、 Object パラメータをキャストしたい場合は、次のように記述できます。

object param;

((Person)param).executePersonMethod();

私の質問は、 Person 型を返すメソッドを作成して、具体的な Person キャストの代わりに使用するにはどうすればよいかということです。次のようなものを書きたいと思います。

public Type GetPersonType()
{
//return here type of person
}

そして使用する

  ((GetPersonType())param).executePersonMethod();

出来ますか?はいの場合、どのように?

4

7 に答える 7

4

インターフェイスを使用できます。

((IPerson)param).executePersonMethod();

各タイプの人は IPerson でなければならず、IPerson で executePersonMethod() を宣言します。

于 2013-09-19T07:34:02.860 に答える
2

こんな用途にも使えますdynamic

dynamicusingは、そのメソッドが存在するかどうかのコンパイル時のチェックをスキップし、存在しない場合は実行時に例外をスローすることに注意してください。

このリスクがあるため、他に選択肢がない場合にのみこれを行いますが、オプションが存在することを知っておくとよいでしょう:

dynamic d = param;
d.executeWhateverMethodHereWithoutCompileTimeChecking();
于 2013-09-19T07:41:33.260 に答える
2

はい、できます。コンパイル中の静的型チェックを回避する dynamic と呼ばれる新しい型があります。

public dynamic GetPersonOrObjectWhichHasExecutePersonMethod()
{
 //return not the type but the object itself
 return new Person(); 
}

public class Person
{
    public void executePersonMethod()
    {
      // do something
    }
}

// this is how you invoke it
public void ExecuteMethod()
{
  dynamic obj = GetPersonOrObjectWhichHasExecutePersonMethod();
  obj.executePersonMethod();
}
于 2013-09-19T07:41:46.707 に答える
1

多分あなたはそのようなものを使うことができます:

Convert.ChangeType(param, typeof(Person)); 

param を Person として返します。

于 2013-09-19T07:37:58.877 に答える
0

使用する

TypeOf()

例 :

        if (data.GetType() == typeof(Personne))
            return (Personne)data;
        else
            return new Personne();

その後、オブジェクトがnullでないことを確認して、問題がないかどうかを確認します

于 2013-09-19T07:38:58.910 に答える
0

でメソッドを実行することはできません。特定の のインスタンスでのみメソッドを実行TypeできますType私が正しく理解していれば、 @LavGが与える答えを使用できるはずです:

タイプではなく、GetPersonTypeメソッドからオブジェクト自体を返す

編集:あなたのコメントによると:

  • Type完全修飾名前空間やその他の手法を使用するのに役立つ SO QA を次に示します。

クラス自体の代わりにクラスの名前だけをパラメーターとして送信して、クラスの型を取得する方法は?

Type.GetType("namespace.abClassName") は null を返します

  • 実行時に指定された Type からクラスを生成する方法は次のとおりです。

実行時にフェッチされる型からクラスを動的に生成する

于 2013-09-19T07:51:39.083 に答える
0

Generic をより適切なオプションとして使用できますが、タイプ コンバーターをリフレクションと組み合わせて使用​​することは可能です。

Type type = GetPersonType();
var converted = Convert.ChangeType(param, type);
converted
     .GetType()
     .GetMethod(/*your desired method name in accordance with appropriate bindings */)
     .Invoke(converted, /* your parameters go here */);
于 2013-09-19T07:42:59.007 に答える