C# には拡張プロパティがありますか?
たとえば、返される拡張プロパティをDateTimeFormatInfo
calledに追加できますか?ShortDateLongTimeFormat
ShortDatePattern + " " + LongTimePattern
C# には拡張プロパティがありますか?
たとえば、返される拡張プロパティをDateTimeFormatInfo
calledに追加できますか?ShortDateLongTimeFormat
ShortDatePattern + " " + LongTimePattern
いいえ、C# 3.0 には存在せず、4.0 には追加されません。これは C# の機能要望のリストにあるため、将来追加される可能性があります。
この時点でできる最善の方法は、GetXXX スタイルの拡張メソッドです。
いいえ、存在しません。
C# チームがある時点で (または少なくとも Eric Lippert はそうでした) 拡張コンストラクターと演算子 (理解するのに時間がかかるかもしれませんが、クールです...) と共にそれらを検討していたことを私は知っています。それらが C# 4 の一部になるという証拠は見られません。
編集: C# 5 には表示されませんでした。2014 年 7 月の時点では、C# 6 にも表示されないようです。
2012 年 11 月まで Microsoft の C# コンパイラ チームの主任開発者だったEric Lippertは、2009 年 10 月にこれについてブログに書いています。
最近これが必要になったので、次の回答のソースを見ました。
より動的なバージョンを作成しました:
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;
}
}