【发布时间】:2014-03-22 04:17:30
【问题描述】:
假设以下类
// What I have created ...
public abstract class TaxServiceProvider<T, S>
where T : TaxServiceProviderConfig
where S : TaxServiceInfo
{
protected T Config { get; set; }
public abstract S GetTax(int zipCode);
}
public abstract class TaxServiceInfo { ... }
public abstract class TaxServiceProviderConfig { ... }
// What I want to create ...
public class SpecialTaxServiceProvider<T, S> : TaxServiceProvider<SpecialTaxServiceProviderConfig, SpecialTaxServiceInfo>
where T : SpecialTaxServiceProviderConfig
where S : SpecialTaxServiceInfo
{ ... }
public class SpecialTaxServiceInfo : TaxServiceInfo { ... }
public class SpecialTaxServiceProviderConfig : TaxServiceProviderConfig { ... }
其中TaxServiceInfo 和TaxServiceProviderConfig 用于支持TaxServiceProvider 类。
我想从TaxServiceProvider 创建一个派生类SpecialTaxServiceProvder(非抽象),它也是通用的,与TaxServiceProvider 相同,并采用SpecialTaxServiceInfo 和SpecialTaxServiceProviderConfig 作为类型。
我想在SpecialTaxServiceProvider 中实现GetTax 和Config,以便GetTax 返回类型SpecialTaxServiceInfo 和Config 的类型为SpecialTaxServiceProviderConfig
然后我将创建一个从SpecialTaxServiceProvider 派生的附加类以及从SpecialTaxServiceInfo 和SpecialTaxServiceProviderConfig 派生的类
public class A_SpecialTaxServiceProvider : SpecialTaxServiceProvider<A_SpecialTaxServiceProviderConfig, A_SpecialTaxServiceInfo>
{ ... }
public class A_SpecialTaxServiceProviderConfig : SpecialTaxServiceProviderConfig { ... }
public class A_SpecialTaxServiceInfo : SpecialTaxServiceInfo { ... }
其中,此类的 GetTax 返回类型 A_SpecialTaxServiceInfo,而此类的 Config 的类型为 A_SpecialTaxServiceProviderConfig
我研究了 C# 中的协方差和泛型类型类的语法,但我不确定我想要做的事情在语言中是否不可能,或者我只是不知道设置它的正确方法起来。
【问题讨论】:
-
您正在将泛型的约束添加到特定的具体类。这背后的原因是什么?
-
我希望任何派生类都被限制为使用同一继承级别的类。如果一个类从 SpecialTaxServiceProvider 继承,我希望它使用的 Config/Info 类来自继承层次结构的相同(或更具体)“组”或“级别”
标签: c# generics inheritance polymorphism abstract-class