我知道有几个答案,现在已经很老了,但最简单的方法就是将它们声明为new private
.
考虑一个我目前正在处理的示例,其中我有一个 API,它使第 3 方 DLL 中的每个方法都可用。我必须采用他们的方法,但我想使用 .Net 属性,而不是“getThisValue”和“setThisValue”方法。因此,我构建了第二个类,继承了第一个类,创建了一个使用 get 和 set 方法的属性,然后将原始的 get 和 set 方法覆盖为私有。任何想要在其上构建不同东西的人仍然可以使用它们,但如果他们只想使用我正在构建的引擎,那么他们将能够使用属性而不是方法。
使用双类方法摆脱了无法使用new
声明隐藏成员的任何限制。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 成为内部的,并且只公开我继承的类。