如何在基类事件参数中检索作为发送方的子类实例

本文关键字:实例 子类 检索 基类 事件 参数 | 更新日期: 2023-09-27 18:21:13

我有一个名为DataModel的类,它实现了INotifyDataErrorInfo接口。在我的应用程序中,我的所有模型都继承自该应用程序,这样我就不必编写错误处理逻辑代码,也不必在任何其他类中更改通知。如何引发下面的基类事件,但将调用它的子类作为发送方发送?我希望尽量减少重复代码,并希望避免整个虚拟和覆盖场景。

virtual void SetErrors(string propertyName, List<string> propertyErrors)
{
    //clear any errors that already exist for this property
    errors.Remove(propertyName);
    //add the list of errors for the specified property
    errors.Add(propertyName, propertyErrors);
    //raise the error notification event
    if (ErrorsChanged != null)
        ErrorsChanged(this, new DataErrorsChangedEventArgs(propertyName));
}

编辑-问题不够清楚

例如说我有这类

public class GangMember : Models.Base_Classes.DataObject
{
    int _age;
    public int Age
    {
        set
        {
            _age = value;
            if (value < 0)
            {
                List<string> errors = new List<string>();
                errors.Add("Age can not be less than 0.");
                SetErrors("Age", errors);
            }
        }
    }
}

当在我的基类DataModel中调用SetErrors()时,它会引发它的事件ErrorsChanged,并将它自己的实例this传递给它。在这种情况下,我如何获得子类GangMember的参考?

如何在基类事件参数中检索作为发送方的子类实例

this总是指向被调用的类,而不是实现类。

public class A
{
    public void PrintType()
    {
        Console.WriteLine(this.GetType().ToString());
    }
}
public class B : A
{
}
// ...
new B().PrintType(); // This will give "B", not "A".