1

静的拡張メソッドで this/focus 変数を変更することは可能ですか?

例えば:

public static class AnimExtensions
{
    public static int anim(this float f, float to, float time)
    {
        return Animation.Start(a => f = a, f, to, time);
    }
}

「this」変数でラムダ関数を使用して、float への拡張機能を使用して Animation.Start メソッドを呼び出したいと思います。this キーワードは拡張メソッドでは許可されていませんが、この方法で変数にアクセス/使用する別の方法はありますか?

4

2 に答える 2

8

確かにパラメーターを変更できますが、通常の方法で引数が値によって渡されるため、何の効果もありません。

ref拡張メソッドの最初のパラメーターをorに宣言することはできませんout。これは、効果を得るために必要なものです。

于 2012-09-05T18:27:17.317 に答える
1

何を尋ねているのかわかりません。メソッドの最初の引数の型は何Animation.Startですか?

float( System.Single) は不変fであるため、オブジェクトを変更することはできません。f新しいオブジェクトに代入することはできますが ( eg f = 3.14F;orと言ってf++;)、Jon Skeet が彼の回答で説明しているように、それは役に立ちません ( ref/outと組み合わせることはできませんthis)。

たとえば、可変参照型で拡張メソッドを作成するとList<>、次のように「this」オブジェクトを変更できます。

public static void AbsAll(this List<float> list)
{
  for (int i = 0; i < list.Count; ++i)
    list[i] = Math.Abs(list[i]);
}

listもちろん、新しいオブジェクトに割り当てることはまだ役に立ちません。

于 2012-09-05T19:00:33.473 に答える