我可以将扩展方法更改为属性吗?

时间:2012-10-29 08:48:38

标签: c#

  

可能重复:
  Does C# have extension properties?

我有以下内容:

 public static class EnumExt
    {
        public static string D2(this Enum key)
        {
            return Convert.ToInt32(key).ToString("D2");
        }
    }

我使用的是这样的:

PageType.ContentBlock.D2()

PageType是Enum。

有没有办法可以做到这一点,以便D2是属性而不是方法?对我来说似乎没有多大意义,我总是要把()放在D2之后?

2 个答案:

答案 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);

所以,当你需要一个参数时,请使用......一个方法!

Does C# have extension properties?