ExpandoObject
密封,无法直接继承。
EDIT2 :为什么我使用ExpandoObject
而不是DynamicObject
,因为ExpandoObject
已实施 INotifyPropertyChanged
, WPF支持。在wpf中,Control会调用System.Object
提到的隐式ToString,那么是否可以覆盖{strong> System.Object.ToString()
的ExpandoObject
?
对@Los Frijoles表示感谢和抱歉,我以前没有表达过我的问题。
答案 0 :(得分:1)
我不知道“优雅”,但你总能尝试这个:
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 < / p>
这超出了作者要求的范围,但我想我会把它包含在以后查看此答案的人中。