C#4.0 新特性 dynamic 简化Com调用的复杂度
来源:互联网 发布:上帝视角的人 知乎 编辑:程序博客网 时间:2024/06/05 00:16
我们以前要实现朗读一段文本,需要如何做呢?
首先在项目中引用 Microsoft Speech Object Library 。 如下Com组件:
然后是一堆复杂的代码。这部分的实现可以采看以下几篇文章:
.Net平台下开发中文语音应用程序
http://www.microsoft.com/china/community/program/originalarticles/TechDoc/Cnspeech.mspx
C#中实现语音朗读(短信 & 语音短信)sms
http://www.cnblogs.com/joyyuan97/archive/2009/02/26/1398716.html
当然 由于 .Net Framework 3.0 中增加了一个命名空间:System.Speech。 实际上从 .Net Framework 3.0 开始,我们要实现语音朗读要简单多了,具体如何实现可以参看我之前的博客:用.net 编码实现朗读文本的方法。 但是我们操作其他微软没有封装的 Com 组件,仍然跟之前一样超级复杂,而且需要相当的技巧。
在 .Net 4.0 中,我们只需要三行代码就可以实现上面的功能,而且项目不需要引用 Microsoft Speech Object Library 。超简单,这是利用了 C# 4.0 的动态查找新特性, 即 dynamic 类型。有关 dynamic 的基础知识,请参看我前篇博客: C# 4.0 特性: dynamic 和 ExpandoObject 。
C# 4.0 的项目不需要引用任何其他组件,只需要下面简单的几行代码,完成阅读文字的功能。
using System;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { Type type = Type.GetTypeFromProgID("SAPI.SpVoice"); dynamic spVoice = Activator.CreateInstance(type); spVoice.Speak("你好,郭红俊,欢迎使用 CSharp 4.0!"); } }}
这个例子引用了 Speech API 中的 SAPI.SpVoice 对象,并调用了其 Speak() 方法。
Type.GetTypeFromProgID 用于获取与指定程序标识符 (ProgID) 关联的类型。
ProgID 是程序员给某个CLSID指定一个易记的名字。在注册表的 HKey_Classes_Root 下,有版本号的ProgID和无版本号的ProgID都会列出,一般无版本号的除了有CLSID子键外会还有CurVer子键来标明版本。
Type.GetTypeFromProgID 是 .NET Framework 1.0 就具有的功能, 但为何到了 .NET Framework 4.0 我们才可以写出这么简单的代码, 这关键就是 dynamic 类型的引用。
任何直接声明为 dynamic 类型的变量,或者从函数中返回 dynamic 类型的值,都将自动地视为后期绑定。即在运行时才会被初始化绑定。 由于这个原因,我们才会用这么简单的代码实现对Com的调用。
参考资料:
C# 4.0 特性: dynamic 和 ExpandoObject
http://blog.joycode.com/ghj/archive/2009/12/29/115832.joy
ProgID是什么
http://kb.cnblogs.com/a/1218548/
- C#4.0 新特性 dynamic 简化Com调用的复杂度
- C# 4.0新特性dynamic作用浅析
- C#4.0 新特性 动态类型Dynamic
- [.net]C#4.0新特性COM开发的福音
- c#4.0新特性之一: Dynamic Lookup (1)
- c#4.0新特性之一: Dynamic Lookup (2)
- 探寻C# 4.0新特性之dynamic关键字
- C#4.0新特性:可选参数,命名参数,Dynamic
- C#4.0新特性:可选参数,命名参数,Dynamic
- C# 4.0 新特性dynamic、可选参数、命名参数等
- C#4.0新特性(1):Dynamic Lookup 动态查找
- C# 4.0 新特性dynamic、可选参数、命名参数等
- 深入C# 4.0 新特性dynamic、可选参数、命名参数的详细介绍
- C#4.0的新特性
- C#4.0的新特性
- WCF 4.0中的新特性:简化的配置
- 介绍Dynamic特性(C#4.0)的好文章
- C#的新特性体验(异步方法的同步调用)
- vb.net里的delegate的使用,委托使用
- Part 1. Concepts
- 十大最佳存储实践
- Chapter 1. Basic IP Connectivity
- 内存访问越界
- C#4.0 新特性 dynamic 简化Com调用的复杂度
- 1.1. IP Networking Control Files
- c#中调用JavaScript脚本函数的一种方法
- 1.2. Reading Routes and IP Information
- Linux 项目管理软件(svn & git……)代理设置
- 1.3. Changing IP Addresses and Routes
- 1.4. Conclusion
- 奋斗
- yy