我有一個泛型基類和兩個從基類派生的類。我想用對象工廠創建這種派生類。但我不能用泛型基類來做到這一點。我可以用Java這樣做,沒有任何問題。我也用c#解決了這個問題,裝箱和拆箱。什麼是正確的方法來做到這一點?C#泛型基多態性
public abstract class Base<T> {
public abstract T Value {
get;
set;
}
}
public class Derived1 : Base<int> {
int value;
public override int Value {
get {
return value;
}
set {
this.value = value;
}
}
}
public class Derived2 : Base<float> {
float value;
public override float Value {
get {
return value;
}
set {
this.value = value;
}
}
}
public class Factory {
public Base create(int type) {
switch(type) {
case 1:
return new Derived1();
case 2:
return new Derived2();
}
}
}
謝謝!
解決:據我所知,因爲任何接口不會有通用的方法,他們也不會幫助。只有解決方案是將值裝入對象中。這是我的解決方案。
public abstract class Base {
public abstract object Value {
get;
set;
}
}
public class Derived1 : Base {
int value;
public override object Value {
get {
return value;
}
set {
this.value = (int) value;
}
}
}
public class Derived2 : Base {
float value;
public override object Value {
get {
return value;
}
set {
this.value = (float) value;
}
}
}
public class Factory {
public Base create(int type) {
switch(type) {
case 1:
return new Derived1();
case 2:
return new Derived2();
default:
return null;
}
}
}
現在我可以將所有派生的對象視爲基礎對象。
我有點失落。你在那裏有什麼問題? – TyCobb
只要你不介意在爲你的Factory添加支持的類型時不介意繼續增加一個int值賦值,這就足夠了。 ......除了@ PeterA.Schneider指出,你必須有一個非通用的'Base'返回。 –
IAbstract
@TyCobb我猜你不能像這樣使用'Base';你必須在「基地」或「基地」之間做出決定,這種做法會破壞目的。 –