是否有可能让抽象基类强制其派生类使用泛型实现特定方法,同时仍能在其他地方使用抽象基类?这就是我的意思:
public abstract class BaseFieldValue<ToutputType,TinputType>
{
public abstract ToutputType DoStuff(TinputType input);
}
public class StringField:BaseFieldValue<string,string>
{
public string StringValue { get; set; }
public override string DoStuff(string input)
{
//Custom implementation for this class
}
}
public class Project
{
public string ProjectName { get; set; }
public List<BaseFieldValue> ProjectFields {get;set;} //ERROR
}
BaseFieldValue
的继承 - &gt; StringField
编译得很好,但是当我尝试在List<BaseFieldValue>
上使用Project
时,它不喜欢语法,因为它需要定义泛型类型。是我尝试做的甚至可能还是有更好的方法?
我目前正在所有这些派生类上实现一个接口,但这迫使我记住它需要继续进行每一个。我希望对从BaseFieldValue
派生的任何类强制执行通用合同。
答案 0 :(得分:1)
只需使您的通用基类继承非泛型基类或接口:
public abstract class BaseFieldValue
{
}
public abstract class BaseFieldValue<ToutputType,TinputType> : BaseFieldValue
{
public abstract ToutputType DoStuff(TinputType input);
}
我目前正在所有这些派生类上实现一个接口...
在这种情况下,您可以考虑使用此接口而不是抽象基类。
public abstract class BaseFieldValue<ToutputType,TinputType> : IFieldValue
{
...
}
public class Project
{
public string ProjectName { get; set; }
public List<IFieldValue> ProjectFields {get;set;}
}