如何在 C# 中为 ExpandoObject 重写 ToString()
本文关键字:重写 ToString ExpandoObject 中为 | 更新日期: 2023-09-27 18:35:28
ExpandoObject
是密封的,不能直接继承。
EDIT2:为什么我使用ExpandoObject
而不是DynamicObject
,因为ExpandoObject
实现了WPF支持的INotifyPropertyChanged
。而在 wpf 中,控件将调用System.Object
提到的隐式 ToString,那么是否可以覆盖System.Object.ToString()
ExpandoObject
?
谢谢也很抱歉@Los弗里约尔斯,我以前没有很好地表达我的问题。
我不知道
"优雅",但您可以随时尝试:
public delegate string ToStringFunc();
public static void Main(string[] args)
{
dynamic test = new ExpandoObject();
test.ToString = new ToStringFunc(() =>
{
return "Test";
});
Console.WriteLine(test.ToString());
}
这只是创建一个名为 ToString
的值,该值恰好是一个函数委托,看起来像ToString
函数的正常方法签名。
这避免了需要扩展ExpandoObject
等,并且似乎保持了我认为的"动态"感觉,即能够定义对象仅在运行时"显示"的方式。当然,"动态感觉"究竟意味着什么完全是主观的。
编辑:
这是一个版本,它将允许使用DynamicObject
注释中提到的隐式ToString,但仍允许ExpandoObject
给出的部分"Expando"功能 https://gist.github.com/kcuzner/3670e78ae1707a0e959d:
这超出了作者要求的范围,但我想我会把它包括在后面查看这个答案的人身上。