访问扩展方法的变量(C#)

时间:2012-09-05 18:25:14

标签: c# extension-methods

是否可以在静态扩展方法中修改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'变量上使用lambda函数来调用使用float的扩展的Animation.Start方法。扩展方法中不允许使用this关键字,但是还有另一种以这种方式访问​​/使用变量的方法吗?

2 个答案:

答案 0 :(得分:8)

您当然可以修改参数 - 但它不会产生任何影响,因为参数是按照常规方法按值传递的。

您无法将扩展方法的第一个参数声明为refout,这是它产生效果所需的参数。

答案 1 :(得分:1)

我不确定你在问什么。 Animation.Start方法的第一个参数的类型是什么?

类型floatSystem.Single不可变,因此您无法修改f对象。您可以将f分配给新对象(例如f = 3.14F;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分配给新对象仍然没有用。