扩展对象到类

时间:2014-03-06 12:20:11

标签: extension-methods

我刚刚发现了扩展方法,扩展方法允许将方法和功能扩展到现有类型,而无需更改代码:Here

// Extending using Extension methods
static class MyExtensionMethods
{
    public static int Negate(this int value)
    {
        return -value;
    }
}

static void Main(string[] args)
{
    //Using extension method
    int i2 = 53;
    Console.WriteLine(i.Negate());
}

我的问题:

是否可以对对象执行相同的操作,例如将int Id添加到Form中,所以我可以这样做:

Form frm = new Form();

frm.Id = 2;

3 个答案:

答案 0 :(得分:1)

Form只是C#中的另一个对象...字符串可能是不可变的,但它只是另一个对象,因此没有理由不能为Form创建扩展方法。

但是,您不能在示例中添加属性设置器和getter。 Eric Lippert谈到this on his blog

答案 1 :(得分:1)

是的,您可以在任何类型的类上创建扩展方法。

但是,您的示例不是方法,而是属性,您无法创建扩展属性。

以下内容有效:

static class FormExtensions{

    public static void SetId(this Form form, int someId)
    {
        // Do something with someId here
    }
}

// Call it like this:
Form frm = new Form();
frm.SetId(2);

答案 2 :(得分:1)

扩展程序方法不是扩展程序属性。该方法看起来像是对象的一部分,但实际上它是与对象一起操作的静态方法。您的第一个示例由编译器转换为:

MyExtensionMethods.Negate(i)