C# 事件处理程序访问器/属性的具体用途是什么?
我有一个与线路的接口:C# 事件处理程序访问器/属性的具体用途是什么?,c#,interface,eventargs,eventhandler,C#,Interface,Eventargs,Eventhandler,我有一个与线路的接口: event EventHandler<MagazineEventArgs> MagazineChangedEvent; 事件事件处理程序MagazineChangedEvent; 当我实现该界面时,Visual Studio会为我生成以下模板: event EventHandler<MagazineEventArgs> IMagazineConfigView.MagazineChangedEvent { add { throw new
event EventHandler<MagazineEventArgs> MagazineChangedEvent;
事件事件处理程序MagazineChangedEvent;
当我实现该界面时,Visual Studio会为我生成以下模板:
event EventHandler<MagazineEventArgs> IMagazineConfigView.MagazineChangedEvent
{
add { throw new NotImplementedException(); }
remove { throw new NotImplementedException(); }
}
事件事件处理程序IMagazineConfigView.MagazineChangedEvent
{
添加{抛出新的NotImplementedException();}
删除{抛出新的NotImplementedException();}
}
但是,我不明白应该如何准确地使用这些属性。通常,您可以使用类似于事件的字段,例如,仅声明:
public event EventHandler<MagazineEventArgs> MagazineChangedEvent;
公共事件事件处理程序MagazineChangedEvent;
这大致相当于声明一个私有委托字段以及订阅和取消订阅该字段的访问器:
private EventHandler<MagazineEventArgs> magazineChanged;
public event EventHandler<MagazineEventArgs> MagazineChangedEvent
{
add { magazineChanged += value; }
remove { magazineChanged -= value; }
}
私有事件处理程序magazineChanged;
公共事件事件处理程序MagazineChangedEvent
{
添加{magazineChanged+=value;}
删除{magazineChanged-=value;}
}
。。。但是类似字段的事件语法提供了更多的线程安全性。线程安全的确切性质取决于您使用的C#版本。从C#4开始,它们比以前干净了一点——更多细节请参见Chris Burrows的博客文章(,)
通常,如果您正在做一些非常不同的事情,您只需要自己实现该事件—例如,将事件订阅链接到不同的基础事件,或者作为一种有效存储各种事件的稀疏订阅的方式
理解事件和普通委托字段之间的区别很重要——这与属性和字段之间的区别类似,尽管稍有细微差别,因为事件只有“订阅”和“取消订阅”操作,调用方无法提出它们或确定其他订阅方。有关更多信息,请参阅。通常,您可以使用类似于事件的字段,例如,仅声明:
public event EventHandler<MagazineEventArgs> MagazineChangedEvent;
公共事件事件处理程序MagazineChangedEvent;
这大致相当于声明一个私有委托字段以及订阅和取消订阅该字段的访问器:
private EventHandler<MagazineEventArgs> magazineChanged;
public event EventHandler<MagazineEventArgs> MagazineChangedEvent
{
add { magazineChanged += value; }
remove { magazineChanged -= value; }
}
私有事件处理程序magazineChanged;
公共事件事件处理程序MagazineChangedEvent
{
添加{magazineChanged+=value;}
删除{magazineChanged-=value;}
}
。。。但是类似字段的事件语法提供了更多的线程安全性。线程安全的确切性质取决于您使用的C#版本。从C#4开始,它们比以前干净了一点——更多细节请参见Chris Burrows的博客文章(,)
通常,如果您正在做一些非常不同的事情,您只需要自己实现该事件—例如,将事件订阅链接到不同的基础事件,或者作为一种有效存储各种事件的稀疏订阅的方式
理解事件和普通委托字段之间的区别很重要——这与属性和字段之间的区别类似,尽管稍有细微差别,因为事件只有“订阅”和“取消订阅”操作,调用方无法提出它们或确定其他订阅方。有关更多信息,请参阅。通常,您可以使用类似于事件的字段,例如,仅声明:
public event EventHandler<MagazineEventArgs> MagazineChangedEvent;
公共事件事件处理程序MagazineChangedEvent;
这大致相当于声明一个私有委托字段以及订阅和取消订阅该字段的访问器:
private EventHandler<MagazineEventArgs> magazineChanged;
public event EventHandler<MagazineEventArgs> MagazineChangedEvent
{
add { magazineChanged += value; }
remove { magazineChanged -= value; }
}
私有事件处理程序magazineChanged;
公共事件事件处理程序MagazineChangedEvent
{
添加{magazineChanged+=value;}
删除{magazineChanged-=value;}
}
。。。但是类似字段的事件语法提供了更多的线程安全性。线程安全的确切性质取决于您使用的C#版本。从C#4开始,它们比以前干净了一点——更多细节请参见Chris Burrows的博客文章(,)
通常,如果您正在做一些非常不同的事情,您只需要自己实现该事件—例如,将事件订阅链接到不同的基础事件,或者作为一种有效存储各种事件的稀疏订阅的方式
理解事件和普通委托字段之间的区别很重要——这与属性和字段之间的区别类似,尽管稍有细微差别,因为事件只有“订阅”和“取消订阅”操作,调用方无法提出它们或确定其他订阅方。有关更多信息,请参阅。通常,您可以使用类似于事件的字段,例如,仅声明:
public event EventHandler<MagazineEventArgs> MagazineChangedEvent;
公共事件事件处理程序MagazineChangedEvent;
这大致相当于声明一个私有委托字段以及订阅和取消订阅该字段的访问器:
private EventHandler<MagazineEventArgs> magazineChanged;
public event EventHandler<MagazineEventArgs> MagazineChangedEvent
{
add { magazineChanged += value; }
remove { magazineChanged -= value; }
}
私有事件处理程序magazineChanged;
公共事件事件处理程序MagazineChangedEvent
{
添加{magazineChanged+=value;}
删除{magazineChanged-=value;}
}
。。。但是类似字段的事件语法提供了更多的线程安全性。线程安全的确切性质取决于您使用的C#版本。从C#4开始,它们比以前干净了一点——更多细节请参见Chris Burrows的博客文章(,)
通常,如果您正在做一些非常不同的事情,您只需要自己实现该事件—例如,将事件订阅链接到不同的基础事件,或者作为一种有效存储各种事件的稀疏订阅的方式
理解事件和普通委托字段之间的区别很重要——这与属性和字段之间的区别类似,尽管稍有细微差别,因为事件只有“订阅”和“取消订阅”操作,调用方无法提出它们或确定其他订阅方。有关更多信息,请参阅