Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类字段事件和匿名委托_C# - Fatal编程技术网

C# 类字段事件和匿名委托

C# 类字段事件和匿名委托,c#,C#,当在声明此事件的类中使用类似eventSomeNews的字段名时,此名称并不指事件本身,而是指编译器创建的匿名私有委托D,因此D可以通过SomeNews()间接调用(在MyClass内部) 但是,如果通过同时指定add和remove访问器来声明事件SomeNews: class MyClass { private delegate MyDelegate _someNews; public event MyDelegate SomeNews {

当在声明此事件的类中使用类似event
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;
            }
        }

        ...
}