我认为我的大脑中途包含了C#4中的动态类型概念,但在我的生活中无法找到我真正想要使用它的场景.
我确信有很多,但我只是无法建立连接,以便我能够设计出一个更好的解决方案,而不是接口,依赖注入等动态解决方案.
那么,动态类型使用是否恰当的实际应用场景是什么?
Jör*_*tag 66
有很多你在哪里的情况下已经使用绑定动态类型和动态今天.你只是没有意识到这一点,因为它全部隐藏在字符串之后,或者System.Object直到C#4,才有必要的支持.
一个例子是COM互操作:COM实际上是一个半动态对象系统.当你进行COM互操作时,很多方法实际上都会返回一个动态对象,但是因为C#不支持它们,所以它们被返回System.Object,你必须自己抛出它们,可能会在途中捕获异常.
另一个例子是与动态类型(甚至无类型)数据交互,例如JSON,CSV,HTML,无模式XML,无模式Web服务,无模式数据库(毕竟,这是新的热点).今天,你使用字符串.XML API看起来像
var doc = new XmlDocument("/path/to/file.xml");
var baz = doc.GetElement("foo").GetElement("qux");
Run Code Online (Sandbox Code Playgroud)
等等.但是怎么样:
dynamic doc = new XmlDocument("/path/to/file.xml");
var baz = doc.foo.qux;
Run Code Online (Sandbox Code Playgroud)
那看起来不是很好吗?
第三个例子是反思.今天,通过将一个字符串传递给InvokeMember(或者调用任何东西)来完成通过反射调用方法.你知道吗,只是调用那该死的东西不是更好吗?
然后,生成动态数据(基本上与第二个示例相反).这是一个如何生成动态XML的示例:
dynamic doc = new XmlBuilder();
doc.articles(id=42, type="List", () => {
article(() => {
number(42);
title("blahblubb");});});
Run Code Online (Sandbox Code Playgroud)
这并不像等效的Ruby那么漂亮,但它是我能在如此短的时间内拿出来的最好的:-)
最后但并非最不重要的是,与动态类型语言集成.无论是Silverlight应用程序中的JavaScript,嵌入在您的业务应用程序中的自定义规则引擎,还是您在CAD程序/ IDE /文本编辑器中托管的DLR实例.
| 归档时间: |
|
| 查看次数: |
19327 次 |
| 最近记录: |