我最近提出了这个编程问题但未能解决它。我被要求编写一个可以继承的子类,以便下面的代码可以正常运行。这里是catch,基类(我将其命名为Party)是唯一可以包含Find()代码的基类。
var address = new Address("56 Main St", "Town", "AZ", "12345");
var customer = new Customer("John", "Doe", address);
var company = new Company("Town Company", address);
Customer savedCustomer = Customer.Find(customer.Id);
Company savedCompany = Company.Find(company.Id);
隐藏 Party
。 Customer
和Company
都继承了它。
如果从其中一个班级打电话,我怎么能让Party退回客户和公司?我被告知可能使用泛型,但我无法将调用更改为Find<Company>(customer.Id)
。但是,我检查的所有资源都表示您无法从基类返回派生类型。
编辑:我通过Customer.Find()
和Company.Find()
调用Party.partyFind()
解决了问题,然后将结果转换为其类型。我提交了解决方案以及解释:
我试图将Find功能保留在基类中 尽可能基类,但我不确定如何返回派生 来自单个基类的类型,没有泛型(这将需要 无论如何修改测试代码)
我收到了回复:
你错了,泛型可以在不修改的情况下解决这个问题 测试代码;在呼叫网站上专门设置
Find
,而不是Find<Customer>
允许。您可以了解有关泛型的更多信息。
答案 0 :(得分:3)
只是查看您的更新,该人正在谈论的内容可能是Party
的专长:
public class Party<T>
{
public static T Find(int id)
{
...
}
}
public class Customer : Party<Customer>{}
public class Company : Party<Company>{}
这确实可以在派生类上静态调用Find
,而无需将泛型类型明确地传递给Find
方法。
var cust = Customer.Find(1); // returns instance of Customer
var comp = Company.Find(2); // returns instance of Company