关于c#:我可以将扩展方法更改为属性吗?


Can I change an extension method into a property?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Does C# have extension properties?

我有以下几点:

1
2
3
4
5
6
7
 public static class EnumExt
    {
        public static string D2(this Enum key)
        {
            return Convert.ToInt32(key).ToString("D2");
        }
    }

我是这样使用的:

1
PageType.ContentBlock.D2()

其中pagetype是枚举。

有没有一种方法可以这样做,使得d2是一个属性而不是一个方法?对我来说,把()放在d2后面似乎没什么意义?


不,这就是它被称为扩展方法的原因。如果不需要其他参数(如var x = y.ExtensionMethod();中的参数),则扩展方法可能看起来可以转换为属性,但它可以接受其他参数。例子:

1
2
3
4
5
6
int y = x.Add(3);

public static int Add(this int source, int value)
{
    return source + value;
}

此外,扩展方法只是"语法糖"。编译器将它们转换成一个普通的方法调用,并将源对象作为参数传递。

示例(扩展方法在类ExtensionMethods中):

1
int y = x.Add(3);

将转换为

1
int y = ExtensionMethods.Add(x, 3);

由编译器编写。


你有一个参数:this Enum key

即使用法"看起来"是属性,也要提醒

1
PageType.ContentBlock.D2();

等于

1
EnumExt.D2(PageType.ContentBlock);

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

C是否具有扩展属性?