【问题标题】:Hiding internal virtual method隐藏内部虚方法
【发布时间】:2014-04-27 18:07:10
【问题描述】:

我有这样的东西;

internal virtual Draw() { ... }

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

是否可以隐藏此方法,因为它甚至对我自己的程序集都不“可见”?

我有没有办法改变这种行为,防止这个方法被调用或重新路由它?

【问题讨论】:

  • 您是要在问题中使用protected internal 而不是public internal 吗?
  • 我认为答案是:使用private void Draw() {...}
  • 你不能。由于这是“内部”并且仅在程序集中被调用,因此您无法阻止对该函数的调用。
  • @farfareast :对不起,这只是“内部”。

标签: c# methods virtual internal method-hiding


【解决方案1】:

如果我理解正确,像这样使用EditorBrowsable 属性会导致方法不在intellisense 中显示:

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

但是,如果某些主体知道它存在,则不能阻止从同一个程序集中调用它。 (你可以从智能感知中隐藏它,人们通常认为它不存在)

【讨论】:

    【解决方案2】:

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

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

    但是,“隐藏”它是没有意义的,因为除了程序集本身(正如你所说的第三者)之外没有人可以调用它或覆盖它,所以这样做没有任何意义。

    【讨论】:

    • 对不起,我错了,这只是internal。不,我无权访问原始源代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2013-08-10
    • 2021-02-25
    相关资源
    最近更新 更多