重新声明不同类型的属性会导致绑定问题

本文关键字:属性 问题 绑定 同类型 新声明 声明 | 更新日期: 2023-09-27 18:26:36

在C#中,可以用不同的类型在派生类中重新声明属性。根据我的尝试,它是有效的,但如果我们使用绑定,我们将得到BindingException-程序需要基类的类型,而不是派生基类。一个示例可以是这样的-XAML:

<TextBlock Text="{Binding Name}" FontSize="24"/>

代码背后:

public class BaseClass
{
    public string Name { get { return 8.ToString(); } }
}
public class DerivedClass : BaseClass
{
    public new int Name { get { return 6; } }
}
public MainPage()
{
    this.InitializeComponent();
    DerivedClass myClass = new DerivedClass();
    Debug.WriteLine($"Name = {myClass.Name}");
    DataContext = myClass;
}

如果我们运行这个,我们会看到Name = 6,但我们会得到绑定异常(期望字符串,而得到int)。

XAML绑定期望基类memeber的类型,这是一种期望的行为吗?

重新声明不同类型的属性会导致绑定问题

正如Henk Holterman在评论中发布的那样,DataBinding使用反射来获取属性名称-您可以在MSDN上找到更多信息。如果我们在具有新类型的派生类中隐藏属性,则反射将返回两种类型。

PropertyInfo[] info = myClass.GetType().GetProperties().ToArray();

根据我的尝试,当具有相同名称的属性中有多个类型时,BindingExpression将抛出异常。