だから...私がこの正しさを理解しているなら:
- 製品クラスを「Product」を継承するサブクラスに拡張したくない
- すべての余分な「状況」プロパティをProductクラス自体に追加する必要はありません。
これを考えると、あなたが探しているのは、状況に応じてオブジェクトに一時的なプロパティを追加する方法ですか?
「カスタムプロパティ」には、標準の単純なHashTable拡張機能をお勧めします。
private HashTable CustomProperties { get; set; }
//Note: all three of these functions are unecessary if you make the hashtable public, but they do look good as far as an interface goes.
public void AddCustomProperty (String key, Object value)
{
CustomProperties.Add(key, value);
}
public void RemoveCustomProperty (String key)
{
CustomProperties.Remove(key);
}
public object GetCustomProperty (String key)
{
return CustomProperties[key];
}
これにより、必要なプロパティをKeyValueペアとしてProductsオブジェクトに直接保存できます。これで、直接データバインディングを使用できなくなったため、それらを表示することがさらに面白くなります...編集と同じです。しかし、ボックスとラベルを直接設定するのは簡単です。
代替ソリューション-ランタイムタイプ
実際には存在しないが、そのように使用できるカスタム型を宣言します。
var ExtProduct = new {
MyCustomProp = "whatever I want",
ProductBase = productInstace };
必要に応じて拡張します。
リストを使ってこれを行うこともできます
var ExtProductList = from a in ProductList select new {
MyCustomProp = "Whatever I want",
ProductBase = a };
これは非常に一時的なものであり、値を他のものに渡す場合にはほとんど役に立ちませんが、結合リストからのカスタム計算や一時的な値のUI表示には大規模なユーティリティがあります。カスタム値を編集可能にする必要がある場合は、キャプチャするのが少し難しくなりますが、それほど重要ではありません。