我正在解析一個http GET查詢字符串到它的組件中。爲了使它成爲模塊化(參數的數量和類型可能會有很大的差別),我希望有一個Parameter抽象基類或接口來定義屬性是否已設置,還有一個Set方法用於設置值。有沒有辦法做到這一點與Set方法的可變參數類型?我可以在C#中創建接口或抽象類來聲明具有未知類型參數的方法嗎?
的總體思路是:然後
public abstract class Parameter
{
public bool IsSet { get; protected set; }
protected Parameter() { IsSet = false; }
public abstract void Set(--unknown type here--);
}
樣本參數孩子會是這樣的:
public class IntParameter : Parameter
{
public int Value { get; protected set; }
public void Set(int value)
{
Value = value;
IsSet = true;
}
}
採用這種結構的話,我可以折騰每個查詢參數到其相應的強類型的類,但仍然確保所有這些類都是一致的。 IsSet屬性的原因是能夠檢查參數是否已設置,因爲某些參數沒有任何「安全」值,我知道它們確實沒有被有意傳遞。如果沒有設置一個值,那麼它會得到一個默認值。
考慮到這個問題,我懷疑它可以被處理,因爲我想實現它,但是這個例子應該讓我能夠理解我想要做什麼。
有沒有關於如何最好地處理它的任何建議。如果有一個方便的設計模式或常見的做法,我不會感到驚訝,但我還沒有設法Google。
我看到了手的選項有:
- 不要使用繼承和依靠,而不是慣例的一致性。我很可能不需要通過列表迭代或其他方式來處理這些問題,但如果我找到了解決方法,它可能會帶來一些新的想法或機會。
- 使用一個對象參數,然後以某種方式做一些typeof()和切換魔法,儘管這會讓我覺得非常醜陋,並且非多態,可以這麼說。
還有其他想法嗎? :)
你可以使用泛型 – Natrium 2010-02-22 13:07:13
是啊,我應該已經意識到。沒有立即注意到您的評論。下面的答案說得很清楚。 :) – McMuttons 2010-02-22 13:38:27