880

C# には拡張プロパティがありますか?

たとえば、返される拡張プロパティをDateTimeFormatInfocalledに追加できますか?ShortDateLongTimeFormatShortDatePattern + " " + LongTimePattern

4

6 に答える 6

439

いいえ、C# 3.0 には存在せず、4.0 には追加されません。これは C# の機能要望のリストにあるため、将来追加される可能性があります。

この時点でできる最善の方法は、GetXXX スタイルの拡張メソッドです。

于 2009-03-06T14:33:40.560 に答える
268

いいえ、存在しません。

C# チームがある時点で (または少なくとも Eric Lippert はそうでした) 拡張コンストラクターと演算子 (理解するのに時間がかかるかもしれませんが、クールです...) と共にそれらを検討していたことを私は知っています。それらが C# 4 の一部になるという証拠は見られません。


編集: C# 5 には表示されませんでした。2014 年 7 月の時点では、C# 6 にも表示されないようです。

2012 年 11 月まで Microsoft の C# コンパイラ チームの主任開発者だったEric Lippertは、2009 年 10 月にこれについてブログに書いています。

于 2009-03-06T14:34:18.543 に答える
1

最近これが必要になったので、次の回答のソースを見ました。

c# プロパティを追加してクラスを拡張

より動的なバージョンを作成しました:

public static class ObjectExtenders
{
    static readonly ConditionalWeakTable<object, List<stringObject>> Flags = new ConditionalWeakTable<object, List<stringObject>>();

    public static string GetFlags(this object objectItem, string key)
    {
        return Flags.GetOrCreateValue(objectItem).Single(x => x.Key == key).Value;
    }

    public static void SetFlags(this object objectItem, string key, string value)
    {
        if (Flags.GetOrCreateValue(objectItem).Any(x => x.Key == key))
        {
            Flags.GetOrCreateValue(objectItem).Single(x => x.Key == key).Value = value;
        }
        else
        {
            Flags.GetOrCreateValue(objectItem).Add(new stringObject()
            {
                Key = key,
                Value = value
            });
        }
    }

    class stringObject
    {
        public string Key;
        public string Value;
    }
}

おそらく大幅に改善される可能性があります(名前付け、文字列ではなく動的)。現在、これをCF 3.5でハックなConditionalWeakTable( https://gist.github.com/Jan-WillemdeBruyn/db79dd6fdef7b9845e217958db98c4d4)と一緒に使用しています。

于 2017-01-12T15:33:20.073 に答える