7

デリゲートとインラインラムダ関数の正確な構文refとパラメーターはどのようになっているのでしょうか。out

ここに例があります

関数が次のように定義されている場合

 public void DoSomething(int withValue) { } 

関数のデリゲートは、次の方法で作成できます。

 public void f()
 {   
     Action<int> f2 = DoSomething;
     f2(3);
 }

元の関数が次のように定義される場合、その構文はどうですか

 public void DoSomething(ref int withValue) { withValue = 3; } 
4

2 に答える 2

12

このメソッドシグネチャの新しいデリゲートタイプを定義する必要があります。

delegate void RefAction<in T>(ref T obj);

public void F()
{
    RefAction<int> f2 = DoSomething;
    int x = 0;
    f2(ref x);
}

.NET Frameworkにこのタイプが含まれていない理由は、refパラメーターがあまり一般的ではなく、可能な組み合わせごとに1つのデリゲートタイプを追加すると、必要なタイプの数が急増するためと考えられます。

于 2012-12-17T23:03:50.597 に答える
4

Action、、、または組み込みのデリゲートを使用することはできませんがFunc<T>、この場合は独自のデリゲートを定義する必要があります。

delegate void ActionByRef<T>(ref T value);

次に、これを考えると、次のことができます。

int value = 3;
ActionByRef<int> f2 = DoSomething;
f2(ref value);
于 2012-12-17T23:04:16.170 に答える