有沒有辦法通過用實際類型參數替換部分或全部類型參數來覆蓋虛擬泛型方法?有沒有辦法通過替換部分或全部類型參數來覆蓋虛擬泛型方法?
class A1
{
public virtual void Generic<T, U>(T t, U u) { }
}
class A2 : A1
{
public override void Generic<T,int>(T t, int u) { } //error
}
感謝名單
有沒有辦法通過用實際類型參數替換部分或全部類型參數來覆蓋虛擬泛型方法?有沒有辦法通過替換部分或全部類型參數來覆蓋虛擬泛型方法?
class A1
{
public virtual void Generic<T, U>(T t, U u) { }
}
class A2 : A1
{
public override void Generic<T,int>(T t, int u) { } //error
}
感謝名單
嘗試常規參數移動到類。
class A1<T,U>
{
public virtual void Generic(T t, U u) { }
}
class A2<T> : A1<T , int>
{
public override void Generic(T t, int u) { }
}
換句話說,我們不能通過用實際類型參數替換部分或全部類型參數來覆蓋虛擬泛型方法嗎? – user702769 2011-04-19 20:04:38
你的例子有點...通用。我相信,這些類具有某種意義,例如,下面的架構是有道理的:
class A1<U>
{
public virtual void Generic<T>(T t, U u) { }
}
class A2 : A1<int>
{
public override void Generic<T>(T t, int u) { } // no error
}
至於其他的答案顯示,你可以做到這一點,如果你的函數的類型參數對應類型參數的類。
如果它們不一致,那是不可能的,因爲你的例子會違反類型安全。請看下面的例子:
A1 a = new A2();
...
a.Generic<string, string>("", "");
這是一個合法的電話,因爲A1提供Generic<T, U>(T t, U u)
。但在運行時,我們遇到了問題,因爲動態類型a
是A2
,而A2中的版本僅支持int作爲第二個參數。
是否是在<
2011-04-19 18:54:35
是的,這是一個typo.thanx – user702769 2011-04-19 21:13:54