重新声明不同类型的属性会导致绑定问题
本文关键字:属性 问题 绑定 同类型 新声明 声明 | 更新日期: 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将抛出异常。