4

現在のクラス/オブジェクトの名前を明示的に渡す代わりに、ジェネリックメソッドを呼び出すときに使用できる現在のクラス/オブジェクトのタイプの省略形はありますか?

たとえば、以下のサンプルコードを考えてみましょう。

public class SomeClass
{
    public SomeClass()
    {
        // Call some generic method that returns a string.
        string s = GenMeth<SomeClass>)();
    }
} // public class SomeClass

明示的にSomeClassと言わなくても、現在のクラス(SomeClass)のクラスをGenMeth()に渡したいことをC#に伝える方法はありますか?

概念を説明する架空の偽の例:

string s = GenMeth<GetType(this)>();
4

3 に答える 3

2

メソッドがその型のインスタンスを消費するようにすると、それを推論できます。たとえば、メソッドが次のようになっているとします。

void GenMeth<T>(T instance) {}

次に、次のように呼び出すことができます。

GenMeth(this);

これがあなたに受け入れられるかどうかは、別の話かもしれません。(引数を消費したことがない場合は少し奇妙になります)

于 2013-02-08T21:53:43.093 に答える
1

いいえ、そのような構文はありません。

理論的には、リフレクションを介してメソッドを呼び出すことができるため、を使用できますthis.GetType()が、それは事態をさらに悪化させます。ただ...そんなことしないでください。コードをコピーして貼り付けると、ジェネリック引数を現在の型に変更することを覚えておく方がはるかに簡単です。

于 2013-02-08T21:52:19.473 に答える
-1

任意のオブジェクトに対する操作を実行する拡張メソッドを作成できます。を使用して、正当なタイプの拡張メソッドをチェックインできますGetType()

public static class ObjectExtensions {

  public static string GenMeth(this object obj) {
    // do stuff here and return string type
  }
}
于 2013-02-08T21:56:08.947 に答える