[英]Casting Generic to abstract base - covariance
下面的代碼給出了編譯時錯誤:
錯誤170無法將類型“ Tests.ChangeListener”轉換為“ Tests.BaseListener”
我該如何進行編譯?
namespace Tests
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void ShouldCompile()
{
BaseListener<IChange> listener = (BaseListener<IChange>)new ChangeListener();
}
}
public interface IChange
{
}
public interface ISpecificChange : IChange
{
}
public abstract class BaseListener<T>
where T : IChange
{
}
public class ChangeListener : BaseListener<ISpecificChange>
{
}
}
由於您不能在抽象類上進行互變或協變(即in
和out
),因此您可能需要為偵聽器提供接口。 修改上面的內容使其看起來可以編譯(請注意,未提及的實體與原始代碼相同-剝離屬性以節省測試時需要導入引用的情況):
public class UnitTest1
{
public void ShouldCompile()
{
IListener<IChange> listener = new ChangeListener();
}
}
public interface IListener<out T> {}
public abstract class BaseListener<T> : IListener<T>
where T : IChange
{
}
顯然,這是您目前沒有的步驟,由於某種原因可能無法使用,但這是使代碼編譯的最簡單方法,我認為您可以執行所需的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.