【发布时间】:2014-10-02 22:31:42
【问题描述】:
我无法让我的测试使用泛型和多态性。
这是我尝试编译时遇到的错误:
类型“Testing.ChildBar”不能用作泛型类型或方法“Testing.BaseFoo”中的类型参数“T”。没有从“Testing.ChildBar”到“Testing.IBar”的隐式引用转换。
类型“Testing.ChildBar”不能用作泛型类型或方法“Testing.BaseFoo”中的类型参数“T”。没有从“Testing.ChildBar”到“Testing.IFoo”的隐式引用转换。
这是我遇到上述错误的控制台应用程序的代码:
class Program
{
static void Main(string[] args)
{
Console.ReadKey();
}
}
public interface IFoo
{
Task<bool> Method1();
Task<bool> Method2();
Task<bool> Method3();
Task<bool> Method4();
Task<bool> Method5();
}
public interface IBar<T> where T : BaseBar
{
T MyStuff { get; set; }
}
public abstract class BaseFoo<T> where T : BaseBar, IFoo, IBar<T>
{
public abstract T MyStuff { get; set; }
public abstract Task<bool> Method1();
public abstract Task<bool> Method2();
public abstract Task<bool> Method3();
public abstract Task<bool> Method4();
public abstract Task<bool> Method5();
}
public abstract class BaseBar
{
}
public class ChildBar : BaseBar
{
public string TestMethod { get { return "Testing123"; } }
}
public class ChildFoo : BaseFoo<ChildBar>
{
private ChildBar _myStuff;
public override ChildBar MyStuff
{
get
{
if (_myStuff == null)
{
_myStuff = new ChildBar();
}
return _myStuff;
}
set
{
_myStuff = value;
}
}
public override Task<bool> Method1() { return new Task<bool>(); }
public override Task<bool> Method2() { return new Task<bool>(); }
public override Task<bool> Method3() { return new Task<bool>(); }
public override Task<bool> Method4() { return new Task<bool>(); }
public override Task<bool> Method5() { return new Task<bool>(); }
private void Test()
{
var test = MyStuff.TestMethod;
}
}
我想做的是创建许多不同的 ChildFoo,每个都有一个“MyStuff”属性,但“MyStuff”属性可以是我创建的任何继承自 BaseBar 的类。
如果您能想出更好的方法来做到这一点。我全神贯注。
【问题讨论】:
-
那个类结构真的令人困惑。您能否提供一个更具体的示例来说明您要完成的工作?
标签: c# generics polymorphism