これはなんて素晴らしいサイトなのか、私はここに潜んでいて、何年もの間他の人の質問を読んでいましたが、今は自分のものを持っています。
私の同僚は、以下のようなクラスを作成しました。それを見るとすぐに機能しないことがわかりましたが、なぜ機能しないのか説明はありません。
彼がそれをaとして宣言するときに期待したのControlItem<Button>
は、ベースを使用してDraw()を呼び出すときにDraw(Button)メソッドが呼び出されるということです。代わりに、常に例外をスローすることになります。
これは共分散の問題ですか?
public abstract class ControlItem
{
public ControlItem()
{
}
abstract public void Draw();
}
public class ControlItem<T> : ControlItem where T : Control, new()
{
public T MyControl { get; set; }
private ControlItem()
{ }
public ControlItem(T control)
: base()
{
MyControl = control;
}
public override void Draw()
{
Draw(this.MyControl);
}
public void Draw(Control cntrl)
{
throw new NotImplementedException();
}
public void Draw(Button button)
{
//Do some work
}
}