我有以下類別:上傳幫助程序的方法?
class Alpha
{
}
class Beta : Alpha
{
}
class Gamma : Beta
{
}
class Epsilon : Beta
{
}
而且我有幾個方法,我把它們作爲參數:
void Receiver(Gamma gamma);
void Receiver(Epsilon epsilon);
void Receiver(Beta beta);
void Receiver(Alpha alpha);
我需要的東西有點不同尋常的位置。
我希望能夠將Alpha對象傳遞給所有方法,但我不希望像void Receiver(Beta beta);
這樣的方法能夠接收從Beta
繼承的類型的對象(也就是說,我想,最壞的情況下會提出Exception
if一個Gamma
或Epsilon
對象傳遞。
我怎樣才能最好以這樣一種方式,是通用實現這一點?
我想在第一部分,我應該有一個方法,它允許上溯造型,這種as
class Alpha
{
public T Upcast<T>() where T : Alpha
{
// somehow return a T
}
}
這裏的問題是,我希望這能夠在各個層面上工作,例如,我希望能夠「向上」Beta
。
第二部分應該更容易一些,因爲我只是拋出高於我需要的類型而被傳遞的對象。
所以這樣的事情就夠了:
void Receiver(Epsilon epsilon)
{
// if epsilon inherits from Epsilon, throw.
}
你能幫我與我的問題的第一部分?謝謝!
如果你有一個接受'Base'作爲參數的方法,並且不能與Derived一起工作,那麼你的類設計是錯誤的。這就是你需要解決的問題。 – Jon 2012-01-12 01:01:09
這是一個特殊的情況,我使用反射來解析屬性到查詢字符串參數中,我不想接受派生類,因爲那些屬性的屬性會導致相關API調用中的非法查詢字符串參數。 – bevacqua 2012-01-12 01:09:26
雖然也許所有的東西都應該被'密封',但我仍然明白你的觀點,但是對我來說重要的是上傳方法。 – bevacqua 2012-01-12 01:10:17