4

C# では、デリゲート型への暗黙的なキャストを定義できます。

class myclass
{
    public static implicit operator Func<String, int>(myclass x)
    {
        return s => 5;
    }
    public static implicit operator myclass(Func<String, int> f)
    {
        return new myclass();
    }
}

しかし残念ながら、これを使ってオブジェクトを関数のように見せることはできません:

var xx = new myclass();
int j = xx("foo");    // error
Action<Func<String, int>> foo = arg => { };
foo(xx);              // ok

独自のクラスのオブジェクトが関数スタイルのパラメーター (引数) をその基本インスタンスで直接受け入れるようにする良い方法はありますか? インデクサーのようなものですが、角括弧の代わりに括弧が使用されていますか?

4

1 に答える 1

2

いいえ、C#では言語の一部としてそれを許可していません。カバーの下で、CLIはcallandcallvirt命令を使用して、メソッドまたは間接的にデリゲートを呼び出します。

callableしたがって、メソッドを宣言することでクラスのインスタンスを作成できるPythonとは異なりdef __call__、C#には同様の機能はありません。

于 2012-07-22T00:29:00.840 に答える