我有以下课程
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
接口?
答案 0 :(得分:1)
这很有用
public class BaseClass<T> : IHtmlString where T : BaseClass<T>
{
}