C# 类字段事件和匿名委托
当在声明此事件的类中使用类似eventC# 类字段事件和匿名委托,c#,C#,当在声明此事件的类中使用类似eventSomeNews的字段名时,此名称并不指事件本身,而是指编译器创建的匿名私有委托D,因此D可以通过SomeNews()间接调用(在MyClass内部) 但是,如果通过同时指定add和remove访问器来声明事件SomeNews: class MyClass { private delegate MyDelegate _someNews; public event MyDelegate SomeNews {
SomeNews
的字段名时,此名称并不指事件本身,而是指编译器创建的匿名私有委托D
,因此D
可以通过SomeNews()间接调用(在MyClass
内部)代码>
但是,如果通过同时指定add
和remove
访问器来声明事件SomeNews
:
class MyClass
{
private delegate MyDelegate _someNews;
public event MyDelegate SomeNews
{
add
{
_someNews += value;
}
remove
{
_ someNews -= value;
}
}
...
}
那么,即使在MyClass
中,名称SomeNews
是否指事件本身,而不是指底层委托\u SomeNews
?我这样假设是因为试图通过someNews()
调用\u someNews
委托会导致编译时错误,即“someNews事件只能出现在+=或-=”的左侧
thanx看来你已经回答了你自己的问题。是的,当使用完整的事件语法时,在声明类中引用事件与在任何其他类中引用事件没有什么不同。这是因为,与属性一样,编译器不知道您在add
和remove
块中实际在做什么
没有任何东西表明您必须创建一个简单的事件来添加和删除底层委托中的值,或者您必须对提供的值执行任何操作。因此,不可能通过简单地在代码中调用事件来“调用”事件,因为编译器不知道如何调用事件
class MyClass
{
private delegate MyDelegate _someNews;
public event MyDelegate SomeNews
{
add
{
_someNews += value;
}
remove
{
_ someNews -= value;
}
}
...
}