有没有办法让一个类“删除”它inheritance的方法?

有没有办法让一个类“删除”它inheritance的方法?

例如,如果我不希望我的类有一个ToString()方法,我可以做一些事情,使它不再可用吗?

不 – 这会违反利斯科夫的替代原则 。 您应始终能够使用子类型的实例,就好像它是超类型的实例一样。

不要忘记,调用者可能只知道您的类型“作为”基本类型或接口。 考虑以下代码:

 object foo = new TypeWithToStringRemoved(); foo.ToString(); 

那将不得不编译,不是吗? 那么你期望在执行时发生什么?

现在对于ToStringGetHashCodeEqualsGetType ,没有办法避免首先使用它们 – 但通常如果有一些方法要从基类型中“删除”,那表明你不应该inheritance它。第一名。 就个人而言,我发现inheritance的作用在面向对象编程中有点过分:它在有用的地方非常有用,但通常我更喜欢组合而不是inheritance,接口作为抽象forms而不是基类。

您可以抛出NotSupportedException ,将其标记为已过时并使用EditorBrowsable :

 [EditorBrowsable( EditorBrowsableState.Never )] [Obsolete( "...", false )] void YourMethod() { throw new NotSupportedException( "..." ); } 

编辑:
正如其他人所指出的:我描述了一种“禁用”方法的方法,但你必须仔细考虑,在哪里使用它。 特别是抛出exception可能是一件非常危险的事情。

正如其他人指出的那样,你不能“删除”一个方法,但如果你觉得它以某种方式冤枉了你,你可以将它隐藏在派生类中。

来自Microsoft的文档(现已退休):

 class Base { public static void F() {} } class Derived: Base { new private static void F() {} // Hides Base.F in Derived only } class MoreDerived: Derived { static void G() { F(); } // Invokes Base.F } 

短awn,NO,因为从对象和对象inheritance的所有类都有此方法。