[英]Interface with a Generic property
我有這樣的結構的簡化版本:
public class ClassX { }
public class ClassY { }
public interface A<T>
{
T Data { get; set; }
}
public class B : A<ClassY>
{
public ClassY Data { get; set; }
}
public class C : A<ClassX>
{
public ClassX Data { get; set; }
}
然后我想做的是這樣的:
public class Example
{
public A Retrieve(string type) // Point A
{
if (type == "B")
{
return new B(); // Point B
}
else
{
return new C(); // Point B
}
}
}
所以第一個問題是我不能使用上述方法的返回類型(A點),因為返回類型出現此錯誤: CS0305: Using the generic type 'A<T>' requires 1 type arguments
然后我將代碼更改為此,希望將泛型類型設置為dynamic
可以解決我的問題:
public class Example
{
public A<dynamic> Retrieve(string type) // Point A
{
if (type == "B")
{
return new B(); // Point B
}
else
{
return new C(); // Point B
}
}
}
但是,我得到了點 B 和點 C 的此錯誤: CS0266: Cannot implicitly convert type 'Ticketing.XF.B' to 'Ticketing.XF.A<dynamic>'. An explicit conversion exists (are you missing a cast?)
CS0266: Cannot implicitly convert type 'Ticketing.XF.B' to 'Ticketing.XF.A<dynamic>'. An explicit conversion exists (are you missing a cast?)
我現在被困住了。 什么是我想做的干凈和適當的解決方案?
這只能通過類的接口來完成。 如果要使用工廠方法,則基本接口不能是通用的。 或者您需要返回一個基本類型,例如 object
public interface IClass
{
}
public class ClassX : IClass { }
public class ClassY : IClass { }
public interface A
{
IClass Data { get; set; }
}
public class BC<T> : A where T : class, IClass
{
public IClass Data { get; set; }
public T As()
{
return Data as T;
}
}
public class Example
{
public A Retrieve(string type) // Point A
{
switch (type)
{
case "B":
return new BC<ClassX>();
default:
return new BC<ClassY>();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.