我無法讓我的測試使用泛型和多態。使用具有多態性的通用接口
這是我得到的錯誤,當我嘗試編譯:
類型「Testing.ChildBar」不能在泛型類型或方法可以作爲類型參數「T」「Testing.BaseFoo」 。沒有從'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繼承的任何類。
如果你能想到的一個更好的方式來做到這一點。我都是耳朵。
該類結構*真*迷惑。你能提供一個更具體的例子說明你正在努力完成什麼? – BradleyDotNET 2014-10-02 22:35:10