これにはいくつかの答えがあり、今ではかなり古いですが、これを行う最も簡単な方法は、それらを として宣言することnew private
です。
私が現在取り組んでいる例を考えてみましょう。ここでは、サード パーティの DLL のすべてのメソッドを利用できるようにする API があります。それらのメソッドを使用する必要がありますが、「getThisValue」および「setThisValue」メソッドの代わりに .Net プロパティを使用したいと考えています。そこで、2 番目のクラスを作成し、最初のクラスを継承して、get メソッドと set メソッドを使用するプロパティを作成し、元の get メソッドと set メソッドをプライベートとしてオーバーライドします。それらに何か違うものを構築したい人はまだ利用できますが、私が構築しているエンジンを使用したいだけであれば、メソッドの代わりにプロパティを使用できるようになります。
new
double クラス メソッドを使用すると、宣言を使用してメンバーを非表示にできないという制限が取り除かれます。override
メンバーが仮想としてマークされている場合は、単に使用できません。
public class APIClass
{
private static const string DllName = "external.dll";
[DllImport(DllName)]
public extern unsafe uint external_setSomething(int x, uint y);
[DllImport(DllName)]
public extern unsafe uint external_getSomething(int x, uint* y);
public enum valueEnum
{
On = 0x01000000;
Off = 0x00000000;
OnWithOptions = 0x01010000;
OffWithOptions = 0x00010000;
}
}
public class APIUsageClass : APIClass
{
public int Identifier;
private APIClass m_internalInstance = new APIClass();
public valueEnum Something
{
get
{
unsafe
{
valueEnum y;
fixed (valueEnum* yPtr = &y)
{
m_internalInstance.external_getSomething(Identifier, yPtr);
}
return y;
}
}
set
{
m_internalInstance.external_setSomething(Identifier, value);
}
}
new private uint external_setSomething(int x, float y) { return 0; }
new private unsafe uint external_getSomething(int x, float* y) { return 0; }
}
現在、valueEnum は両方のクラスで使用できますが、プロパティのみが APIUsageClass クラスで表示されます。APIClass クラスは、元の API を拡張したり、別の方法で使用したりしたい人のために引き続き利用できます。APIUsageClass は、より単純なものを望む人のために利用できます。
最終的には、APIClass を内部化し、継承したクラスのみを公開します。