介绍
这是c/c++程序迷们经常谈论的一个话题,同时也是一个复杂的、难以理解的话题-指针!每次谈到c#,大多数我遇到的人都持这样的观点-c#中没有指针的概念。而实际上,它已经被废除了,取而代之的是c#中的非安全编程-如何在程序中使用指针。 不同于其字面意思的是,使用指针编程并没有什么不安全的。
它如此受关注的根本原因是,非安全编程不同于习惯的.net开发规范,而需要编程人员进行明确定本地环境设置(仅适用于本地执行)。本文我将从区别两个最容易被疑惑的概念-非安全代码与非受控代码开始讨论非安全编程这个主题。接下来我们将讨论如何编写非安全代码,亦即如何在c#中使用指针。
非安全还是非受控?
受控代码是指在clr管理下执行的代码。clr负责了许多幕后的工作:
管理对象的内存
进行类型验证
垃圾回收
说了这些,实际就是要将用户从上述的这些工作中解脱出来了,专心于业务实现。用户不再需要直接手工地进行内存操作,因为这些工作已由clr完成了。
另一方面,非受控代码就是在clr上下文外执行的代码了。最好的例子就是我们平时使用的win32 dll,比如kernel32.dll,user32.dll以及安装上我们系统上的各种com组件。如何为它们分配内存、如何释放这些内存、如何实现类型验证?这些工作都需要它们自己来完成。一个典型的c++程序中分配一个字符指针的语句也是非受控代码的另一类例子,因为作为一名编程者,你要负责:
调用内存分配函数
确保类型转换的结果正确
确保指针在使用完毕后其内存被释放
如果你留心上面的解释,所有这些工作都是由clr来完成以减轻编程者的负担。
非安全代码是介于受控与非受控代码间的一种代码类型
非安全代码仍然象受控代码一样是在clr的管理下执行的,但在同时它又象非受控代码一样允许你通过指针直接访问内存。因此你获得了两者的优点。如果你正在编写写一个.net应用程序,但同时又希望可以广泛使用win32 dll中的各种函数-需要使用指针的,那么此时非安全代码就是你的救星了。
我们已经明确了两者的区别后,就开始编写实际的代码,毫无疑问,这才是最精彩的部分,你还在想什么呢?
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器