我有以下内容:
public static class EnumExt
{
public static string D2(this Enum key)
{
return Convert.ToInt32(key).ToString("D2");
}
}
我使用的是这样的:
PageType.ContentBlock.D2()
PageType是Enum。
有没有办法可以做到这一点,以便D2是属性而不是方法?对我来说似乎没有多大意义,我总是要把()放在D2之后?
答案 0 :(得分:1)
不,这就是为什么它被称为Extension Method 。虽然如果不期望其他参数(如var x = y.ExtensionMethod();
),它可能看起来可以转换为属性,但扩展方法可以采用其他参数。例如:
int y = x.Add(3);
public static int Add(this int source, int value)
{
return source + value;
}
此外,扩展方法只是"语法糖"。编译器将它们转换为普通方法调用,源对象作为参数传递。
示例(扩展方法在类ExtensionMethods
中):
int y = x.Add(3);
将转换为
int y = ExtensionMethods.Add(x, 3);
由编译器。
答案 1 :(得分:0)
嗯,你有一个参数:this Enum key
即使使用“看起来像”属性,也要提醒
PageType.ContentBlock.D2();
相当于
EnumExt.D2(PageType.ContentBlock);
所以,当你需要一个参数时,请使用......一个方法!