如何访问ProcessModule.Events属性?
问题描述:
ProcessModule.Events - 从MSDN:http://msdn.microsoft.com/en-us/library/system.diagnostics.processmodule_properties%28v=vs.110%29.aspx如何访问ProcessModule.Events属性?
这里是我的代码:
System.Diagnostics.Process[] procs =
System.Diagnostics.Process.GetProcessesByName(TARGET_BASE);
if (procs.Length > 0)
{
foreach (System.Diagnostics.Process p in procs)
{
System.Diagnostics.ProcessModule pm = p.MainModule;
System.ComponentModel.EventHandlerList ehl = pm.Events;
}
}
编译器抱怨ehl = pm.Events
,即:
'System.ComponentModel.Component.Events' 是由于无法访问到其保护级别
请注意,我没有得到访问ProcessModule的其他属性的错误。编译器抱怨由于其保护级别,getEvent的访问器无法访问。
答
MSDN明确指出此属性为protected
。这意味着只有从对象类型派生的类可以访问它的属性。
这与.NET中的大多数事件实现一致。公共用户通常仅限于添加和删除处理程序,而无法查看,替换或清除整个处理程序列表。尽管事实上这是一个财产,而不是一个真实的事件,但它似乎是遵循有限访问的相同方法。
ProcessModule继承* Component的Events *是一个相当离奇的.NET 1.0怪癖。它绝对不会*做你希望它做的事,在另一个过程中没有办法得到事件。编译错误当然是为了防止你犯这个错误。 – 2014-09-05 01:00:32
这就解释了为什么Intellisense拒绝向我展示Events属性:-)。汉斯,你应该只是将你的回答作为答案......答案是“无论MSDN说什么,你都无法这样做”。 – 2014-09-05 01:06:16
我喜欢像大多数SO用户那样的快乐答案。 – 2014-09-05 01:26:33