隐藏内部虚拟方法

时间:2014-04-27 18:07:11

标签: c# methods virtual internal method-hiding

我有这样的东西;

internal virtual Draw() { ... }

在已编译的程序集中。我有从这个类派生的类。显然,在特定集会之外,我无法覆盖这种方法,甚至无法调用它。

是否可以隐藏此方法,因为它甚至不可见"可见"从我自己的集会?

根本没有办法改变这种行为,以防止调用此方法或重新路由它?

2 个答案:

答案 0 :(得分:1)

如果我正确无误地使用EditorBrowsable这样的属性会导致某个方法无法在intellisense中显示:

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
protected internal virtual Draw() { ... }

但是如果soem body知道它在那里,你无法阻止从同一个程序集中调用它。 (你只能将它隐藏在智能感知中,人们通常认为它不存在)

答案 1 :(得分:0)

首先,我假设您的方法是protected internal,而不是public internal,这不是有效的方法签名。

关于隐藏方法,如果您有权访问已编译的librarys源代码,则可以将其重构为仅在程序集内部protected,因此只有派生类型可以覆盖它。

但是,“隐藏”它没有意义,因为大会本身之外没有人(正如你所说的那样是第三方)可以调用它或覆盖它,所以没有必要这样做。