如何解决无法从局部类调用事件
我具有以下类结构:
public abstract class Base : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
internal partial class ImplBase : Base {
}
internal partial class ImplBase {
void someFunc(){
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("propName"));
}
}
为什么语言不允许从局部类引发事件?
在此处查看代码段:https://dotnetfiddle.net/k8catR
解决方法
与它是局部类没有任何关系。它与您尝试从未定义的类中提高偶数有关。下面没有任何错误。
public partial class Base : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
public partial class Base
{
protected void RaiseEvent(string propertyName)
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("propertyName"));
}
}
internal partial class ImplBase : Base
{
}
internal partial class ImplBase
{
void someFunc()
{
RaiseEvent("propName");
}
}
,
您可以在没有部分类的情况下重现错误编译:
public abstract class Base : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
internal class ImplBase : Base
{
void someFunc()
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("propName"));
}
}
此代码具有相同的错误消息,它不是部分类限制。这是一个传统限制:
当创建一个可用作其他类的基类的类时,应考虑以下事实:事件是一种特殊类型的委托,只能从声明它们的类中调用。派生类不能直接调用在基类中声明的事件。尽管有时您可能想要一个只能由基类引发的事件,但在大多数情况下,应启用派生类以调用基类事件。为此,您可以在包装事件的基类中创建一个受保护的调用方法。通过调用或重写此调用方法,派生类可以间接调用事件。
您需要在声明事件的类中引发事件。您可以在方法中执行此操作,然后在子类中重用该方法:
public abstract class Base : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyName));
}
}
internal partial class ImplBase : Base
{ }
internal partial class ImplBase
{
void someFunc()
{
RaisePropertyChanged("propName");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。