C#, 是宣传还是有用的技术?
作者:unknown 来源:本站收集 发布时间:2005-10-20 8:35:15 发布人:21codes
减小字体 增大字体 颜色 默认 灰度 橄榄色 绿色 蓝色 褐色 红色
C#(读做 "C sharp")是微软公司在去年六月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司。NET windows网络框架的主角。
在本文中,我将考察创建一种新计算机语言的一般动机,并将特别指明是什么原因导致了C#的出现。然后我将介绍C#和它与Java,c,c++的相似之处。其次我将讨论一些存在于Java和C#之间的高层次的,和基础的差别。我将以衡量在用多种语言开发大型应用程序的时候所需的知识(或者对这种知识的缺乏程度)来结束本文,而这正是.NET和C#的一个主要战略。目前,C#和.NET还只能以C#语言规则,以及Windows 2000的一个"d预览版本",还有MSDN上迅速增多的文档集子的形式获得(还没有最终定型)。
微软c#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点。C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说structs),它还增加了自己新的特点(比方说源代码版本定义)。但它还太不成熟,不可能挤垮Java.C#还需要进化成一种开发者能够接受和采用的语言。而微软当前为它的这种新语言大造声势也是值得注意的.目前大家的反应是:"这是对Java的反击。"
C#更象Java一些,虽然微软在这个问题上保持沉默。这也是意料中的事情,我觉得,因为Java近来很成功而使用Java的公司都报告说它们在生产效率上比C++获得了提高。
Java所带来的巨大影响和大家对它的广泛接受已经由工作于这种语言和平台之上的程序员数量明显的说明了(估计世界范围内共有两百五十万程序员使用Java)。由这种语言写成的应用程序的数量是令人惊讶的并已经渗透了每一个级别的计算,包括无线计算和移动电话(比如日本发明的Java电话)。C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就象已经由SSI公司的CEO和主席Kalpathi S. Suresh指出来的那样,"我发现所有这些都是渐进的.如果C#不存在,我们总能回到Java或C和C++.这些都不完全是新技术;它们在更大的意义上来说只是大公司制造的市场噱头。我们必须给他们时间安顿下来看看这些是不是真的对IT工业有什么影响。"
C #从Java继承而来的特点
类:在C#中类的申明与Java很相似.这是合理的因为经验告诉我们Java模型工作得很好。Java的关键字import已经被替换成using,它起到了同样的作用。一个类开始执行的起点是静态方法Main()。下面的Hello World程序展示了基本的形式:
using System;
class Hello {
static void Main() {
Console.WriteLine("Hello, world");
}
}
在这个例子中,System这个名字指向一个包括了基本C#实用类集合的命名空间(namespace).这个命名空间包括了Console类,它在这个例子中被用来输出一个字符串。类可以是抽象的和不可继承的:一个被申明成abstract的类不能被实例化;它只能被用做一个基类。C#关键字lock就象Java关键字final,它申明一个类不是抽象的,但是它也不能被用做另一个类的基类。界面:就象在Java中一样,一个界面是一组方法集合的抽象定义。当一个类或结构体实现一个界面的时候,它必须实现这个界面中定义的所有方法。.一个单一的类可以实现几个界面。也许以后会出现一些微妙的差别,但是这个特点看起来与Java相比没有变化。布尔运算:条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型.从布尔类型到其他类型没有直接的转换过程。布尔常量true和false是C#中的关键字。错误处理:如Java中那样,通过抛出和捕捉异常对象来管理错误处理过程。内存管理:由底层.NET框架进行自动内存垃圾回收。
C#从C和C++继承的特点
编译: 程序直接编译成标准的二进制可执行形式。如果前面的Hello World程序被保存成一个文本文件并被命名为Hello.cs,它将被编译成命名Hello.exe的可执行程序。
结构体: 一个C#的结构体与C++的结构体是相似的,因为它能够包含数据申明和方法。但是,不象C++,C#结构体与类是不同的而且不支持继承。但是,与Java相同的是,一个结构体可以实现界面。
预编译: C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制。可用的预编译指令有:
#define
#undef
#if
#elif
#else
#endif
#warning
#error
#line []
没有了#include 伪指令。你无法再用#define 语句对符号赋值,所以就不存在源代码替换的概念--这些符号只能用在#if和#elif伪指令里。在#line伪指令里的数字(和可选的名字)能够修改行号还有#warning和#error输出结果的文件名。
操作符重载:一些操作符能够被重载,而另一些则不能.特别的是,没有一个赋值运算符能够被重载。能够被被重载的单目操作符是:
+ - ! ~ ++ -- true false
能够被重载的二元运算符是:
+ - * / % & | ^ << >> == != > < >= <=
C#独有的特点
C#最引人入胜的地方是它和Java的不同,而不是相似的地方。这一节(和这个系列第二部分的大部分地方)讲述了C#实现的和Java不同的地方或者Java根本没有的特点。
中间代码:微软在用户选择何时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语言子类化。
索引下标:一个索引与属性除了不使用属性名来引用类成员而是用一个方括号中的数字来匿名引用(就象用数组下标一样)以外是相似的。
public class ListBox: Control {
private string[] items;
public string this[int index] {
get {
return items[index];
}
set {
items[index] = value;
Repaint();
}
}
}
可以用一个循环器来匿名引用字符串内部数组成员,就象下面这样:
ListBox listBox = ...;
listBox[0] = "hello";
Console.WriteLine(listBox[0]);
代理和反馈:一个代理对象包括了访问一个特定对象的特定方法所需的信息.只要把它当成一个聪明的方法指针就行了。代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用。一个反馈方法是代理的特例.event关键字用在将在事件发生的时候被当成代理调用的方法声明中。
结论
C#和C++之间的相似之处对任何已经对C和C++进行了培训投资的公司来说是很大的好处.熟悉C++的程序员将很容易的学会C#。而且,花了时间学习Java的Windows程序员(通常以Visual J++的形式出现)将比C++程序员更快的学会C#。在编程界的普遍认为是"如果你学会了Java,而且懂得C++,那么你已经懂得了C#的90%。"
我希望本文给了你C#与Java和C++之间的联系的大概印象.总的说来,我相信C#提供了更大的程序表现力而且比Java更适合编写性能关键的程序,而同时拥有Java的优美和简洁,这都使得它比C++更诱人。
没有合适的资源?快使用搜索试试~ 我知道了~
ASP。NET学习大纲,内有代码
共756个文件
aspx:348个
config:47个
dll:40个
需积分: 3 10 下载量 62 浏览量
2008-10-23
16:08:33
上传
评论
收藏 11.48MB RAR 举报
温馨提示
这是我们几个人一起从不同的地方总结的,感觉还好,提供给大家。希望能为你带来帮助。
资源推荐
资源详情
资源评论
收起资源包目录
ASP。NET学习大纲,内有代码 (756个子文件)
Global.asax 1KB
Global.asax 1KB
Global.asax 765B
Global.asax 760B
Global.asax 659B
Global.asax 414B
Global.asax 307B
Global.asax 306B
Global.asax 306B
Global.asax 239B
Global.asax 81B
Global.asax 77B
Global.asax 76B
Global.asax 71B
AddressProperties.ascx 796B
AddressHashTable.ascx 631B
ControlEvents.ascx 461B
welcome.ascx 367B
FeaturedProduct2.ascx 364B
FeaturedProduct1.ascx 360B
Address.ascx 302B
Featured2.ascx 265B
Featured1.ascx 261B
HeaderTitle.ascx 248B
WordRepeater.ascx 234B
Divider.ascx 178B
SimpleHeader.ascx 147B
DataListEdit.aspx 4KB
PanelMultiPage.aspx 3KB
DataGridEditTemplate.aspx 3KB
DataListMasterDetail.aspx 3KB
DataGridEditProducts.aspx 3KB
CalendarSchedule.aspx 2KB
Login.aspx 2KB
MasterDetail.aspx 2KB
CacheStore.aspx 2KB
OrderForm.aspx 2KB
CacheEmployees.aspx 2KB
DataGridMasterDetail.aspx 2KB
Login.aspx 2KB
Details.aspx 2KB
DataGridCustomPaging.aspx 2KB
DataListEvents.aspx 2KB
Register.aspx 2KB
UpdateDataSet.aspx 2KB
Display.aspx 2KB
CustomValidatorLuhn.aspx 2KB
DynamicForm.aspx 2KB
RepeaterTable.aspx 2KB
Register.aspx 2KB
AggregateColumn.aspx 2KB
SqlTransaction.aspx 1KB
DataRelation.aspx 1KB
CacheProducts.aspx 1KB
Controls.aspx 1KB
FormsIdentity.aspx 1KB
DisplayAddressProperties.aspx 1KB
SqlFormUpdate.aspx 1KB
DisplayAddressHashTable.aspx 1KB
DataTableProperties.aspx 1KB
NestedRowFilter.aspx 1KB
DataGridSortExpression.aspx 1KB
RadioButtonListDataValueField.aspx 1KB
DataGridButtonColumn.aspx 1KB
UserInfo.aspx 1KB
CustomValidator.aspx 1KB
SqlParameterSelect.aspx 1KB
DataGridEditCommandColumn.aspx 1KB
DropDownListDataValue.aspx 1KB
DataListTemplate.aspx 1KB
ListBoxDataValue.aspx 1KB
ListItemCollection.aspx 1KB
ReadRecipes.aspx 1KB
DataListSelected.aspx 1KB
LinkButtonList.aspx 1KB
ASPTransaction.aspx 1KB
BaseWebControlDynamic.aspx 1KB
OleDbParameterSelect.aspx 1KB
ItemDataBound.aspx 1KB
SortDataView.aspx 1KB
CheckBoxListDataValue.aspx 1KB
MissingSchemaAction.aspx 1KB
ValidationSummaryPopUp.aspx 1KB
CreateDataTable.aspx 1KB
ValidationSummary.aspx 1KB
SqlQueryTool.aspx 1KB
CalendarHoroscope.aspx 1KB
DataGridTemplate.aspx 1KB
Login.aspx 1KB
SqlGetLastName.aspx 1KB
SqlAddUniqueProduct.aspx 1KB
SqlFormInsert.aspx 1KB
CheckBoxListValueSelected.aspx 1KB
TextBoxAutoPostBack.aspx 1KB
SqlAddProduct.aspx 1KB
Compute.aspx 1KB
DefaultValue.aspx 1KB
RadioButtonListValueSelected.aspx 1KB
DropDownListValueSelected.aspx 1KB
DataGridPaging.aspx 1KB
共 756 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
微笑书生
- 粉丝: 40
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功