我有一个要求:
我有一个基类和一组派生类:
public class BaseClass
{
public bool IsGood {get; set;}
}
public class DerivedClassA : BaseClass
{
public bool CanTalk {get; set;}
}
public class DerivedClassB : BaseClass
{
public bool CanGrowl {get; set;}
}
对于每个派生类(DerivedClassA
,DerivedClassB
),我有重复的代码
DerivedClassA
,DerivedClassB
),IsGood
)似乎我可以通过使用泛型来删除重复。
我的伪代码看起来如下:
//not sure what the signature should look like
public T MakeGood<T>(T thing)
{
//gets either DerivedClassA or DerivedClassB
//sets base property IsGood to True
//return either DerivedClassA or DerivedClassB
}
我可以使用泛型做什么吗?
这可以在不修改类结构的情况下实现吗?
如果解决方案已经存在,请提前道歉。
答案 0 :(得分:4)
是的,在T
上设置类型约束。
public T MakeGood<T>(T thing) where T : BaseClass
{
thing.IsGood = true;
return thing;
}
但我确实怀疑这种方法在当前形式下是否非常有用。该方法实际上应该是静态的,因为您似乎不使用实例属性。为什么要回归T
?
答案 1 :(得分:3)
使用类型约束:
public T MakeGood<T>(T thing) where T : BaseClass {
…
}
只能针对从T
中获取T
的{{1}}类型进行实例化。请参阅 Constraints on Type Parameters 。
答案 2 :(得分:-1)
您确定要将此作为方法吗?这似乎是你所说的代码气味......我需要更多地了解这个过程。
考虑使用virtual
属性并在子类中覆盖它。
public class BaseClass
{
public virtual bool IsGood {get;}
}
public class DerivedClassA : BaseClass
{
public override bool IsGood {get { return CanTalk; }}
public bool CanTalk {get; set;}
}
public class DerivedClassB : BaseClass
{
public override bool IsGood {get { return CanGrowl; }}
public bool CanGrowl {get; set;}
}