【发布时间】:2012-12-27 22:34:03
【问题描述】:
我正在扩展一个库类,它有一个我不希望从外部调用的公共方法。我知道我可以使用“new”关键字来隐藏它,但问题是它有很多不同的声明。 像这样的:
class Parent() {
public double method(double a, double b) { ... }
public int method(int a, int b) { ... }
public System.Int32 method(System.Int32 a, System.Int32 b) { ... }
}
现在我可以这样做了:
class Child() {
// Make method private.
private new double method(double a, double b) { return base.method(a, b) }
private new int method(int a, int b) { return base.method(a, b) }
private new System.Int32 method(System.Int32 a, System.Int32 b) { return base.method(a, b) }
/// Own Code.
}
但我想知道是否没有更简单的方法可以将该函数的所有覆盖设为私有。
【问题讨论】:
-
没有。还要考虑在使用方法之前将对象(
Child类型)强制为Parent的情况。 C# 中的继承在基本 LSP 规则下确实最有效。 -
同意@pst。当你从
Parent派生Child时,你必须记住Child是一个Parent。如果您可以在Parent上调用该方法,那么您必须能够在Child上调用它。 -
你可能是对的,我都准备好害怕了。我想我仍然在脚本语言方面想得太多。谢谢。
-
如果可能的话,您可以在子类中有一个 Parent 类型的私有成员,这样您就可以在私有父类对象上调用该方法,而无需让子类从父类继承。跨度>
-
这不是继承的使用方式。 Child 旨在支持父级的所有功能。
标签: c# polymorphism overriding method-hiding