gpt4 book ai didi

c# - 静态方法返回基类实例

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:25 25 4
gpt4 key购买 nike

我有以下类(class):

//some base class
public abstract class MyObject<T>{

public static T FromObject(object anotherObject){
var t = Activator.CreateInstance<T>();
// some reflection logic here
return t;
}
}

public class Product: MyObject<Product>{
}

public class ProductCart: MyObject<ProductCart>{
public ICollection<Product> Products{get;set;}
}

public class Basket: ProductCart{
public int BasketId{get;set;}
}

public class Order: ProductCart{
public int OrderId{get;set;}
}

所以现在我可以像这样构建我的模型:

var products = serviceContext.Products.Select(Product.FromObject).ToList(); // no problem here

var basket = Basket.FromObject(serviceContext.Basket); // problem is here - instance of ProductCart is returned

var order = Order.FromObject(serviceContext.Order); // same problem, instance of ProductCart

有没有办法解决它并获得转换的购物篮和订单而不是基础 ProductCart?

目标是:

 var basket = Basket.FromObject(serviceContext.Basket); // return instance of Basket inherited from ProductCart

感谢您的帮助。

最佳答案

如果可以更改类定义,则可以将类型传递给 ProductCart ,像这样:

public class ProductCart<T> : MyObject<T> { }
public class Basket : ProductCart<Basket> { }
public class Order : ProductCart<Order> {}

在您的定义中,您告诉 Basket.FromObject显式返回 ProductCart s(继承自 MyObject<ProductCart> )。

如果您无法更改继承树,您可以选择隐藏原始方法(或将其放在工厂中):

public class Basket : ProductCart
{
public int BasketId { get; set; }

public Basket FromObject(object anotherObject)
{
return MyObject<Basket>.FromObject(anotherObject);
}
}

关于c# - 静态方法返回基类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com