I have to say that I think Richard was a little hard done by - his answer is just as good as Jason's in that they both only answered half of the question. Put them both together and you have the full answer.
To make this work with IDbCommand
, DbCommand
& SqlCommand
there has to be an explicit implementation of IDbCommand
in DbCommand
(Jason's answer) and public method shadowing in SqlCommand
(Richard's answer).
完全な "Foo/Bar"の例を挙げます。
これらのインタフェースから始めてください:
public interface IFoo
{
IBar GetBar();
}
public interface IBar { }
次の IBar
ではなく、 Bar
を返すために、 Foo
は IFoo
code> GetBar メソッド:
public abstract class Foo : IFoo
{
IBar IFoo.GetBar()
{
return this.GetBar();
}
public Bar GetBar()
{
return this.GetBarInner();
}
protected abstract Bar GetBarInner();
}
public abstract class Bar : IBar { }
最後に、 SomeFoo
インスタンスを返すには、 SomeFoo
クラスをシャドーして GetBar
public class SomeFoo : Foo
{
public new SomeBar GetBar()
{
return new SomeBar();
}
protected override Bar GetBarInner()
{
return this.GetBar();
}
}
public class SomeBar : Bar { }
私はリチャード氏がシャドーメソッドに new
キーワードを追加してコンパイラエラーを取り除くという唯一の情報だと思います。