程序设计-ASP.NET基础知识(三)

对比类

程序设计-ASP.NET基础知识(三)

C#, Java 和 c++ 的特点,有什么相同的地方,不同的地方, C# 分别从 c++ 和 java 中吸取了他们那些优点?

C# 看起来与 Java 有着惊人的相似 ; 它包括了诸如单一继承 , 界面 , 与 Java 几乎同样的语法 , 和编译成中间代码再运行的过程 . 但是 C# 与 Java 有着明显的不同 , 它借鉴了 Delphi 的一个特点 , 与 COM( 组件对象模型 ) 是直接集成。

微软 c# 语言定义主要是从 C 和 C++ 继承而来的 , 而且语言中的许多元素也反映了这一点 .C# 在设计者从 C++ 继承的可选选项方面比 Java 要广泛一些 ( 比如说 structs), 它还增加了自己新的特点 ( 比方说源代码版本定义 ).

C# 从 Java 继承而来的特点

类:在 C# 中类的声明与 Java 很相似。特点看起来与 Java 相比没有变化 .

布尔运算:条件表达式的结果是布尔数据类型 , 布尔数据类型是这种语言中独立的一种数据类型 . 从布尔类型到其他类型没有直接的转换过程 . 布尔常量 true 和 false 是 C# 中的关键字 .

错误处理:如 Java 中那样 , 通过抛出和捕捉异常对象来管理错误处理过程 .

内存管理:由底层 .NET 框架进行自动内存垃圾回收 .

C# 从 C 和 C++ 继承的特点

编译:程序直接编译成标准的二进制可执行形式 .

结构体:一个 C# 的结构体与 C++ 的结构体是相似的 , 因为它能够包含数据声明和方法 . 但是 , 不象 C++,C# 结构体与类是不同的而且不支持继承 . 但是 , 与 Java 相同的是 , 一个结构体可以实现界面 .

预编译: C# 中存在预编译指令支持条件编译 , 警告 , 错误报告和编译行控制 . #error

C# 独有的特点

中间代码:微软在用户选择何时 MSIL 应该编译成机器码的时候是留了很大的余地 . 微软公司很小心的声称 MSIL 不是解释性的 , 而是被编译成了机器码 . 它也明白许多 -- 如果不是大多数的话 -- 程序员认为 Java 程序要不可避免的比 C 编写的任何东西都要慢 . 而这种实现方式决定了基于 MSIL 的程序 ( 指的是用 C#,Visual Basic,"Managed C++"--C++ 的一个符合 CLS 的版本 -- 等语言编写的程序 ) 将在性能上超过 " 解释性的 "Java 代码 . 当然 , 这一点还需要得到事实证明 , 因为 C# 和其他生成 MSIL 的编译器还没有发布 . 但是 Java JIT 编译器的普遍存在使得 Java 和 C# 在性能上相对相同 . 象 "C# 是编译语言而 Java 是解释性的 ," 之类的声明只是商业技巧 .Java 的中间代码和 MSIL 都是中间的汇编形式的语言 , 它们在运行时或其它的时候被编译成机器代码 .

命名空间中的声明:当你创建一个程序的时候 , 你在一个命名空间里创建了一个或多个类 . 同在这个命名空间里 ( 在类的外面 ) 你还有可能声明界面 , 枚举类型和结构体 . 必须使用 using 关键字来引用其他命名空间的内容 .

基本的数据类型: C# 拥有比 C,C++ 或者 Java 更广泛的数据类型 . 这些类型是 bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double, 和 decimal. 象 Java 一样 , 所有这些类型都有一个固定的大小 . 又象 C 和 C++ 一样 , 每个数据类型都有有符号和无符号两种类型 . 与 Java 相同的是 , 一个字符变量包含的是一个 16 位的 Unicode 字符 .C# 新的数据类型是 decimal 数据类型 ,对于货币数据 , 它能存放 28 位 10 进制数字 .

两个基本类:一个名叫 object 的类是所有其他类的基类 . 而一个名叫 string 的类也象 object 一样是这个语言的一部分 . 作为语言的一部分存在意味着编译器有可能使用它 -- 无论何时你在程序中写入一句带引号的字符串 , 编译器会创建一个 string 对象来保存它 .

参数传递:方法可以被声明接受可变数目的参数 . 缺省的参数传递方法是对基本数据类型进行值传递 .ref 关键字可以用来强迫一个变量通过引用传递 , 这使得一个变量可以接受一个返回值 .out 关键字也能声明引用传递过程 , 与 ref 不同的地方是 , 它指明这个参数并不需要初始值 .

与 COM 的集成: C# 对 Windows 程序最大的卖点可能就是它与 COM 的无缝集成了 ,COM 就是微软的 Win32 组件技术 .实际上 , 最终有可能在任何 .NET 语言里编写 COM 客户和服务器端 .C# 编写的类可以子类化一个以存在的 COM 组件 ; 生成的类也能被作为一个 COM 组件使用 , 然后又能使用 , 比方说 , JScript 语言子类化它从而得到第三个 COM 组件 . 这种现象的结果是导致了一个运行环境的产生 , 在这个环境里的组件是网络服务 , 可用用任何 .NET 语言子类化 .

索引下标:一个索引与属性除了不使用属性名来引用类成员而是用一个方括号中的数字来匿名引用 ( 就象用数组下标一样 )以外是相似的 .

代理和反馈:一个代理对象包括了访问一个特定对象的特定方法所需的信息 . 只要把它当成一个聪明的方法指针就行了 . 代理对象可以被移动到另一个地方 , 然后可以通过访问它来对已存在的方法进行类型安全的调用 . 一个反馈方法是代理的特例.event 关键字用在将在事件发生的时候被当成代理调用的方法声明中 .

在 C #中, string str = null 与 string str = “” 的区别。

string str = null 是不给他分配内存空间 , 而 string str = "" 给它分配长度为空字符串的内存空。

DataReader 和 DataSet 的异同

DataReader 和DataSet 最大的区别在于,DataReader 使用时始终占用SqlConnection ,在线操作数据库,任何对SqlConnection 的操作都会引发DataReader 的异常,因为DataReader 每次只在内存中加载一条 数据,所以占用的内存是很小的,因为DataReader 的特殊性和高性能。所以DataReader 是只进 的,你读了第一条后就不能再去读取第一条了。

DataSet 则是将数据一次性加载在内存中。抛弃数据库连接,读取完毕即放弃数据库连接,因为DataSet 将数据全部加载在内存中。所以比较消耗内存,但是确比DataReader 要灵活,可以动态的添加行,列,数据 。对数据库进行回传更新 操作。

俊霖

发表评论

您必须