我遇到了一種情況,我很好奇這種用例可能有哪些可能的解決方案或備選方案。分配給類屬性的通用方法參數
我有一個接受通用參數的方法簽名的類。所以,我提出的方法簽名本身一般:
/// <summary>
/// Input Widget.
/// </summary>
public sealed class InputWidget {
/// <summary>
/// Widget's Control.
/// </summary>
public IList<dynamic> Controls { get; private set; }
public InputWidget AddControl<TC>(InputControl<TC> control) where TC : BaseControl<TC> {
this.Controls.Add(control);
return this;
}
}
如果我想該參數指定的類屬性,不管是什麼原因,我不能這樣做,除非屬性的類型爲object
,或開始。 NET 4,dynamic
。
使用dynamic
而不是object
爲我省去了一個麻煩,即當我從列表中檢索每個元素以供進一步使用時,必須將object
重塑爲其泛型類型。但是我對dynamic
也不太滿意,因爲我沒有編譯類型安全性,Intellisense,如果我不小心,它可能在運行時是致命的。
那麼,爲什麼我不簡單地聲明我的類是通用的?因爲我不想限制我的方法接受特定類型的InputControl
。此外,我還定義了其他方法,我省略了這些方法,但需要採用相同的方法。如果使用N個泛型類型來定義我的類會很無聊,其中N是這種情況下方法的數量。
那麼處理這種情況的最佳方法是什麼?我錯過了什麼嗎?我是否錯誤地思考?更糟糕的是,我的設計完全錯誤,我需要重新開始閱讀一本初學者書籍?
你要求做的事情本質上是非類型安全的。如果我叫'AddControl()'怎麼辦?您可能需要一個非泛型基類型,協方差和/或約束。你想達到什麼目的? –
SLaks
@SLaks我在方法簽名中省略了類型約束。我在我的例子中再次添加了它。 – 9ee1
@SLaks基本上,我想了解什麼是這樣的問題最好的辦法。我想過使用非泛型基類型,事實上,我現在就是這樣解決它的。但是,你介意提供其他建議的例子嗎? – 9ee1