首页 > 解决方案 > 在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; }
}

标签: c#inheritance

解决方案


很难做到你想要的。我建议相反。以正常方式检索常规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;

推荐阅读