如何在 C# 中访问受保护的方法

Posted

技术标签:

【中文标题】如何在 C# 中访问受保护的方法【英文标题】:How to access a protected method in C# 【发布时间】:2012-01-12 16:39:08 【问题描述】:

我想知道如何访问受保护的方法。

我有一个 WebBrowser 控件 (Awesomium),它有许多受保护的方法。

我在 WinForm 中使用此 WebControl 创建了一个选项卡式浏览器。

现在我不能使用 ie InjectKeyboard-method 因为它受到保护。

这是方法:

//     Injects a keyboard event.
//
// Parameter:
//   keyEvent:
//     The keyboard event to inject. You'll need to initialize the members of the
//     passed Awesomium.Core.WebKeyboardEvent, yourself.
//
// Note:
//      Awesomium.Windows.Forms.WebControl handles this internally. Inheritors do
//     not need to call this method unless they implement custom logic.  This method
//     bypasses settings of the Awesomium.Windows.Forms.WebControl.InputController.
//      For performance reasons, no validity check is performed when calling protected
//     members.  Inheritors should perform any such checks (see Awesomium.Windows.Forms.WebControl.IsLive),
//     before calling these members.

protected void InjectKeyboardEvent(WebKeyboardEvent keyEvent);

虽然在 API 链接中是 HERE

他们为什么要保护这种方法,我该如何使用它?

【问题讨论】:

一个函数通常被标记为受保护的,因为它可以改变对象的状态或改变对象的行为,而原始编码者可能不希望外部调用者能够这样做。但是,派生类这样做可能是完全可以接受的——因此使用它。在这种情况下,正如评论所提到的,覆盖或绕过此方法将改变类在输入方面的行为。 感谢您的解释,我明白为什么现在受保护了。 【参考方案1】:

从此类继承并在需要时公开该方法(如方法上方的注释所建议的那样)。

【讨论】:

所以我应该创建一个继承 WebControl 类并只公开该方法的新类? 是的,你应该从Awesomium.Windows.Forms.WebControl继承。但也许你可以在这个继承的类中做你想做的事,并且不需要公开方法,因为 private/protected 不是为了好玩而注解的,而是封装了内部行为。 只是为了理解(我不是大师级程序员)。这是正确的继承方式吗?类 WebControlExtend : WebControl public void TempInject(WebKeyboardEvent events) this.InjectKeyboardEvent(events); 我尝试使用 extends 代替:但似乎它不存在这个关键字。另一件事,如果您有空闲时间,如何以这种方式使用事件?受保护的覆盖无效 OnMouseMove(MouseEventArgs e);这个我尝试使用公共覆盖无效 OnMouseMove(MouseEventArgs e) 但不起作用。说我没有什么可以覆盖 ofc。 哎呀抱歉,这是 C# 而不是 Java,当然是 :。您不覆盖事件,您可以附加您的处理程序。你想对这些事件做什么?

以上是关于如何在 C# 中访问受保护的方法的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 问题中访问受密码保护的 MS 访问数据库

通过基类变量访问的 C# 受保护成员 [重复]

C# 中实例成员的受保护访问? [复制]

在 C# 中访问 Windows 中受密码保护的网络驱动器?

在 C# 中,我们可以对接口使用受保护的访问修饰符吗?

我可以在 Swift 中获得与 C# 的“受保护”访问类似的最终结果吗?