【发布时间】:2017-05-25 22:24:28
【问题描述】:
我有以下课程
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 类型“DerivedClassA”不能是 在泛型类型或方法中用作类型参数“T” '基类'。没有隐式引用转换 'DerivedClassA' 到 'System.Web.IHtmlString'。 WebApplication5 C:\MyProjects\WebApplication5\WebApplication5\Models\BaseBuilder.cs 27 活动
我如何重构这些类,所以我只有基类上的IHtmlString 接口?
【问题讨论】: