如何在 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# 中访问受保护的方法的主要内容,如果未能解决你的问题,请参考以下文章