所以......如果我理解这个正确性:
- 您不想将产品类扩展为继承“产品”的子类
- 您不想将所有额外的“情境”属性添加到 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 显示进行自定义计算具有巨大的实用性。当您需要自定义值可编辑时,它们有点难以捕捉,但不是很明显。