c# - 在c#中设置基类的属性
问题描述
我有一个我认为是一个简单的菜鸟问题。
在我使用的 CMS 中,有一个方法 Product.Get(4545) 获取内置 Product 类的所有属性。
我希望以此来扩展产品类,所以我想这就是我在基本级别上要做的事情。
public class ExtendedProduct : Product
{
public ExtendedProduct ()
{
}
public string Foo { get; set; }
}
但是如何将基础产品设置为 Product.Get(4545) 的结果,以便设置所有这些属性?我在想类似(这不起作用)base = Product.Get(4545) 或类似的东西。
Product 类实际上已经有 100 多个属性。例如。
我可以打电话
var prod = Product.Get(22);
var price = prod.Price; //22.99
从下面的回复中更新我的想法,我在想
var prod = ExtendedProduct.Get(22); static method that sets the base class properties?
var price = prod.Price; //22.99
var foo = prod.Foo
在写这篇文章时,我认为最简单的方法是将 Product 传递给 ExtendedProduct 的构造函数并拥有 Product 的属性。但这是懒惰吗?
我希望避免出现我会打电话new ExtendedProduct(product).Product.Price
只是打电话的情况new ExtendedProduct(product).Price
public class ExtendedProduct
{
public ExtendedProduct (Product product)
{
this.Product = product;
}
public Product Product { get; internal set; }
public string Foo { get; set; }
}
解决方案
很难做到你想要的。我建议相反。以正常方式检索常规Product
对象,并根据需要使用扩展方法将其转换为扩展对象。
static class ExtensionMethods
{
static public ExtendedProduct ToExtendedProduct(this Product source)
{
return new ExtendedProduct(source);
}
}
现在你可以这样做:
var prod = Product.Get(22);
var price = prod.Price;
var foo = prod.ToExtendedProduct().Foo;
推荐阅读
- csv - Apache NiFi:如何比较 csv 中的多行并创建新列
- react-native - React Native 中的隐藏文本输入
- c# - 必须在 cosmosdb 删除操作中为此操作提供 PartitionKey 值
- hyperledger-fabric - Hyperledger fabric node sdk register user give me [错误:无法验证第一个证书]
- c++ - 无法在鼠标单击OpenGL时围绕自己的中心旋转对象
- c - 在 macos 上发送太快时丢包
- python - 如何在 selenium 中保留登录状态
- android - 如何重新生成 ios 和 android 文件夹?
- r - 如何在 R 中使用 directlabels 包添加重复标签
- c++ - 多线程程序中的分段错误和 gdb 回溯信息不完整