强制派生类用泛型实现方法 - C#

时间:2018-04-09 14:48:56

标签: c# generics abstract-class

是否有可能让抽象基类强制其派生类使用泛型实现特定方法,同时仍能在其他地方使用抽象基类?这就是我的意思:

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派生的任何类强制执行通用合同。

1 个答案:

答案 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;}
}