0
public virtual IAsyncResult BeginProcessRequest(RequestContext context, AsyncCallback callback, object state)
{
    return this.process.BeginInvoke(**ref context**, callback, state);
}

public virtual RequestContext EndProcessRequest(IAsyncResult result)
{
    RequestContext context = null;
    this.process.EndInvoke(**ref context**, result);
    return context;
}

上記の2つの方法は、私のプロジェクトでいくつかの警告を引き起こしています。よくわかりません。警告は次のとおりです。

パラメータが「値」として宣言されている間、引数は「ref」です

警告の場所は、Invoke呼び出しの最初のパラメーター(コンテキスト)です。誰かがこれに何か問題があると思いますか、または問題についていくつかのアドバイスがありますか?

これらの二重アスタリスクが警告の原因です。エディターで「太字」を押したところ、それが実行されたので、そのまま使用しました。アスタリスクは私のコードにはありません。

4

3 に答える 3

7

デリゲートで使用refするのは悪い考えです、IMO。(とにかく、正直に言うと、通常は悪い考えだと思います。メソッドに1つのことを実行させ、1つの結果を得るようにします。)

私はそれがまったく機能するとは思いませんでしたが、ref呼び出すときにパラメータを指定する限り、明らかに機能しEndInvokeます。

using System;

class Program
{
    delegate void Foo(ref int x, string y);

    static void SampleFoo(ref int x, string y)
    {
        Console.WriteLine("Incoming: {0}", x); // 10
        x = y.Length;
    }

    static void Main(string[] args)
    {
        int x = 0;
        int input = 10;
        Foo f = SampleFoo;
        IAsyncResult result = f.BeginInvoke(ref input, "Hello", null, null);
        f.EndInvoke(ref x, result);
        Console.WriteLine("Result: {0}", x); // 5
    }
}

ここでの動作は混乱を招く可能性があります...可能な限り回避します。

のほとんどの使用法は、C#でパラメーターの受け渡しがどのようrefに機能するかを理解していないためです...それがここに当てはまる可能性はありますか?本当に最初のパラメータが必要ですか?代わりに、デリゲートの戻り値を新しいコンテキストにすることはできますか?ref

于 2011-07-05T19:06:46.003 に答える
5

BeginInvokerefおそらくそこにパラメータを期待していません。つまりref context、そのオブジェクトへの参照(それ自体の参照)を渡します。のメソッドシグネチャを確認できますBeginInvokeか?

于 2011-07-05T19:06:31.360 に答える
1

仕組みがよくわからないと思いますref

まず、ref(またはout)はメソッドシグネチャの一部であるため、メソッドでパラメータがパラメータとして指定されている場合は、refを使用する必要refがあります。それ以外の場合は、を使用しないでください。ref

第二に:

public virtual IAsyncResult BeginProcessRequest(RequestContext context, AsyncCallback callback, object state)
{
    return this.process.BeginInvoke(ref context, callback, state);
}

どこのref新しい値も使用しないため、は何もしませんcontext。 「in」と「out」の両方であることを除けばref、パラメータに似ています。out通常のパラメーターは「in」のみと考えることができます(私は「in」という用語を構成しています)。

于 2011-07-05T19:14:42.447 に答える