类型' XXX'不能用作类型参数' T'在泛型类型或方法中

时间:2017-05-25 22:24:29

标签: c# generics

我有以下课程

public interface IHtmlString
{
    string ToHtmlString();
}

public class BaseClass<T> where T : BaseClass<T>, IHtmlString
{
    public BaseClass()
    {
    }
    public T Method1()
    {
        return (T)this;
    }
    public T Method2(string key, object value)
    {
        return (T)this;
    }
    public string ToHtmlString()
    {
        return ToString();
    }
}

public class DerivedClassA : BaseClass<DerivedClassA>
{
    public DerivedClassA MethodSpecificToClassA()
    {
        return this;
    }
    public override string ToString()
    {
        return "<div/>";            
    }
}

public class DerivedClassB : BaseClass<DerivedClassB>
{
    public DerivedClassB MethodSpecificToClassB()
    {
        return this;
    }
    public override string ToString()
    {
        return "<span/>";
    }
}

请注意,该方法返回this实例,以便我可以链接方法,如下面的

 var a = new DerivedClassA()
        .Method1()
        .MethodSpecificToClassA()
        .ToHtmlString();

然而我得到编译时错误

  

严重级代码描述项目文件行抑制状态   错误CS0311类型&#39; DerivedClassA&#39;不可能是   用作类型参数&#39; T&#39;在泛型类型或方法中   &#39; BaseClass的&#39 ;.没有隐式引用转换   &#39; DerivedClassA&#39;至   &#39; System.Web.IHtmlString&#39 ;. WebApplication5 C:\ MyProjects \ WebApplication5 \ WebApplication5 \ Models \ BaseBuilder.cs 27活动

我如何重构这些类,所以我只在基类上有IHtmlString接口?

1 个答案:

答案 0 :(得分:1)

这很有用

public class BaseClass<T> : IHtmlString where T : BaseClass<T>
{
}