「IFoo」を実装する基本クラス「MyClass」にアクセスできるとします。「IFoo」は関数「int FooValue()」を定義し、「MyClass」はそれを明示的に実装します。ここで、'MySubClass' という 'MyClass' のサブクラスがあり、そのサブクラスで 'FooValue' をオーバーライドしたいが、サブクラスの実装が基本クラスの実装の結果に基づくようにしたいとします。
通常、これは実装を基本クラスの保護された関数に移動するだけで解決され、それをサブクラスでオーバーライドするだけです。やった、やった。しかし、基本クラスのソース コードにはアクセスできません。ライブラリへの参照としてのみ使用します。では、これをどのように解決しますか?
重複ではありません (更新: ...as this one)!
ここにこの SO の質問があります... C#: インターフェイスを明示的に指定することによるプロパティのオーバーライド... これは、通常のチャネル自体を介して基本クラスのインターフェイスをオーバーライドすることはできませんが、同じインターフェイスを明示的に再実装できることを示していますサブクラスであり、インターフェイスをオーバーライドしているように動作します (ただし、実際には、オーバーライドするのではなく、再実装しています)。(そのため、これはその質問の複製ではありません。)
これは基本クラスの疑似コードですが、コード単位でアクセスすることはできません...
public interface IFoo
{
int FooValue();
}
public class MyClass : IFoo
{
int IFoo.FooValue() <-- Explicit implementation requiring a cast to access.
{
return 4;
}
}
これは私たちがやろうとしていることですが、このように「ベース」を使用できないため、明らかにこれは許可されていません。
public class MySubClass : MyClass
{
int IFoo.FooValue()
{
int baseResult = ((IFoo)base).FooValue(); <-- Can't use 'base' like this
return baseResult * 2;
}
}
それで、これは可能ですか?