0

可能重复:
C# 有扩展属性吗?

我有以下内容:

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

我这样使用:

PageType.ContentBlock.D2()

其中 PageType 是一个枚举。

有没有办法让 D2 成为一个属性而不是一个方法?我总是必须将 () 放在 D2 之后,这对我来说似乎没有多大意义?

4

2 回答 2

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

由编译器。

于 2012-10-29T09:05:03.853 回答
0

好吧,你有一个参数:this Enum key

即使用法“看起来像”一个属性,也要提醒

PageType.ContentBlock.D2();

相当于

EnumExt.D2(PageType.ContentBlock);

因此,当您需要参数时,请使用...方法!

C# 有扩展属性吗?

于 2012-10-29T08:51:20.813 回答