0

Possible Duplicate:
Does C# have extension properties?

I have the following:

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

Which I use like this:

PageType.ContentBlock.D2()

Where PageType is an Enum.

Is there a way I can do this so that D2 is a property and rather not a method? It doesn't seem to make much sense to me that I always have to put the () after D2 ?

4

2 に答える 2

1

いいえ、それが拡張メソッドと呼ばれる理由です。(のように)他のパラメーターが予期されていない場合はプロパティに変換できるように見えるかもしれませんが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 に答える