为什么第二行GetInvocationList()
没有编译?
DataContextChanged
事件声明与MyDataContextChanged
相同。
public partial class TestControl : UserControl
{
public event DependencyPropertyChangedEventHandler MyDataContextChanged;
public TestControl()
{
InitializeComponent();
var invocationList = MyDataContextChanged.GetInvocationList();
//var invocationList = DataContextChanged.GetInvocationList(); NotWorking
}
答案 0 :(得分:0)
编译器将public event
翻译为private
委托支持字段和public
add
和remove
方法。
因此,在声明类之外,您只能使用event
添加或删除处理程序(通过+=
和-=
运算符)。但您无法访问支持字段。
要致电GetInvocationList()
,您需要访问代理字段,但这是private
。
因此,您可以为您自己的GetInvocationList()
致电MyDataContextChanged
,因为其支持字段在您自己的private
类中为TestControl
。
基础类DataContextChanged
中private
事件的支持字段为TestControl
(不确定UserControl
还是层次结构的更高层)。因此,您无法从派生的TestControl
类中进行访问。