我刚刚发现了扩展方法,扩展方法允许将方法和功能扩展到现有类型,而无需更改代码: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;
答案 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)