c#
一,概论
C#(C♯,C#,C-sharp,C Sharp,CS)是由微软公司所开发的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。
C#从C和C++演变而来,本质上是.NET CLR语义的C风格的语法表达。是MS为.net平台而开发的一种新型编程语言:牺牲C++一点底层功能,以获得更方便和更产品化。C#看似基于C++写成,但又融入其它语言如Delphi、Java、VB等。C#无疑是.NET水中最引人注目的鱼。在某种程度上可以把CS与当年MS的明星ASP相提并论。我们能够用C#开发控制台应用程序,Windows应用程序,Web应用程序。
二,历史版本
研发设计师Anders Hejlsberg(安德斯•海尔斯伯格,曾主持设计原Broland公司的Turbo Pascal,Delphi,和后来MS的Visual J++) 主持研发了C#,他认为所有的主流编程语言包括C++, Java, Delphi,Smalltalk等都影响了CLR的基础理念,同样也是C#的设计基础。
C#中发音为C Sharp,命名#的创意据说来源于音乐中的升调符号,表示在C的基础上技术进一步提升之意。或说是因为C#开发小组的人因为讨厌而故意使用搜索引擎不好识别的#字符;或说表示C++++。
在.net框架研发中,使用的编程语言被称为SMC(Simple Managed C)
1998年12月,微软启动专门为CLR设计的纯面向对象的语言COOL(C-like Object Oriented Language)。
1999年7月,微软完成了COOL语言的一个内部版本。
2000年2月,因为版权原因将COOL语言更名为C#。
2000年7月,发布了C#语言的第一个预览版。所以公认C#是2000年发布的。
2002年2月,微软推出Visual Studio 7.0,VisualStudio .NET 2002。C# 1.0正式发布
2003年5月,微软推出了Visual Studio .NET 2003,C# 1.1。
版本 |
语言规格 |
编译器 |
说明 |
C#1.0 |
2001年 |
2002年1月 |
|
C#2.0 |
2002年12月 |
2005年11月 |
|
C#3.0 |
2005年6月 |
2006年11月 |
|
C#4.0 |
2006年6月 |
开发中 |
C#在2001年12月成为ECMA-334 C#标准规范,在2003年成为ISO标准ISO/IEC 23270。ECMA标准列出的C#设计目标:简单、现代、通用,以及面向对象。C和C++等代码的可移植性 支持强类型檢查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(Garbage Collection,指一种自动内存释放技术)、国际化、操作系统大小通用性、硬件底层经济性、分布开发。
现在有一些独立的实现正在进行,包括:
自由软件基金会的dotGNU Portable.NET
Mono
Baltie - C# IDE for children and young Baltie
三,C#特点
C#来源于C++,吸收了JAVA,它的语法和C一样简洁,和C++一样面向对象,和VB一样允许图形化的设计,便得创建用户界面非常容易。C#继承了C++和Java的语法,去掉了C++中的许多复杂和容易引起问题的东西,比起Java,它又多了一些非常简洁优美的特性。由于语法上的相似性,C++ 和Java程序员能够很容易地掌握C#。
简洁的语法,很好地融合了Visual Basic的简明性和C++的强大功能
完全面向对象的精心设计:只允许单一继承(single inheritance),但是一个类可以实现多个接口(interfaces)。属性支持,使用类似访问成员的方式调用。完整的反射支持。
与 Web的紧密结合
完整的安全性与错误,非常强的类型安全:指针(Pointer)只能被用于不安全模式。大多数对象访问通过安全的引用实现,以避免无效的调用,并且有许多算法用于验证溢出,指针只能用于调用值类型,以及受垃圾收集控制的托管对象。C#比C++更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类。而接口布尔型同整型,及枚举型同整型不允许隐含转换,非空指针(通过引用相似对象)同用户定义类型的隐含转换必段被显式的确定,不同于C++的复制构造函数。
版本处理技术
灵活性与兼容性,类似于C和C++的语法和关键字
垃圾回收:对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收。
C# 2.0 的特性:分部类,泛型,静态类,迭代器,匿名方法,委托的协变和逆变,属性访问器可以被单独设置访问级别,可空类型,??操作符
C# 3.0 的特性:,Linq,类型初始化器,集合初始化器,匿名类型,局部变量类型推断,Lambda表达式,自动化属性,扩展方法,局部方法
C#4.0的特性: 动态查阅,具名参数与可选参数,与 COM 对象互动,支持方差
相对于C和C++,这个语言在许多方面进行了限制和增强:
数组声明语法不同(”int[] a = new int[5]” 而不是 “int a[5]“)。
枚举位于其所在的命名空间中。
C#中没有模版(Template),但是在C# 2.0中引入了泛型(Generic programming),并且支持一些C++模版不支持的特性。比如泛型参数中的类型约束。另一方面,表达式不能像C++模版中被用于类型参数。
C#,C++和Java的比较
功能 |
C# |
C++ |
Java |
继承 |
只允许类的单继承, 允许实现多个接口 |
允许类的多继承 |
允许类的单继承 允许实现多个接口 |
指针 |
支持,只在很少使用的非安全模式下支持,通常以引用取代指针 |
支持,很常用 |
完全不支持代之以 引用 |
源代码编译后的形式 |
.NET中间语言 |
可执行代码 |
字节码 |
内存管理 |
由运行时环境管理系统自动回收 |
人工管理 |
由运行时环境管理系统自动回收 |
接口实现 |
通过interface实现 |
通过抽象类 |
通过interface实现 |
之前SUN公司认为Visual J++ 违反了Java开发平台的中立性,对微软提出了诉讼。后来Java的研发设计师James Gosling和Sun创始人Bill Joy认为C#是Java的仿冒品,Gosling 说C#就是去掉一些可靠性,生产率,安全性后的Java。Anders Hejlsberg争论说C#并非Java克隆而是更接近于C++。双方恩怨难了。
四,C#开发环境
1,程序的执行:C#并不被编译成为能够直接在计算机上执行的二进制本地代码。与Java类似,它被编译成为中间代码(Microsoft Intermediate Language),然后通过.NET Framework的虚拟机——被称之为通用语言运行库(Common Language Runtime)——执行。
所有的.Net编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。
在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区(Buffer)中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度明显加快。
2,C# 有5个著名的编译器(compilers):
最标准的 C# 的实现当属微软自己推出、并被包含在 .NET Framework 内的 C# 编译器。
微软的Rotor项目(Rotor Project)(目前称为 Shared Source Common Language Infrastructure),提供了 通用语言运行库(Common Language Runtime)的实现与 c# 编译器。
由 Novell 赞助的 Mono 项目提供了 C# 编译器,同时也接近百分之百地实现了.NET Framework类库。
Dot GNU 项目也提供了另一个自由版本的 C# 编译器, 也提供了.NET Framework类库的实现。
Borland 提供了项目级的 C# 集成开发环境,内部所使用的编译器仍是微软.NET Framework所提供的 C# 编译器(这也意味着你仍须安装微软的.NET Framework。产品: C# Builder(商业版本),Turbo C# Explorer(免费版本)。
3, SDK(Software Development Kit,软件开发包)通常是为了方便在某种平台上开发软件而开发的。C#目前有四种SDK:
A, Microsoft为Windows平台开发的.Net Framework
B, Microsoft 以自己的 SSCLI License 所发布的 Shared Source Common Language Infrastructure - Rotor
C, 开源跨平台的Mono
D, 开源的DotGNU Project
4, 开发工具:在Windows环境下常用的是Microsoft的Visual Studio .Net开发环境和Borland的C# Builder。
5,调试:条件编译,异常处理
五,C#教程
1,cs速成教程
2,cs语法基础
3, cs语法进阶:面向对象编程
4, cS web编程,c♯windows编程,c♯控制台编程,c♯事件,c♯windowforms控件,c♯对话框,c♯_gdi,c♯部署应用程序,c♯_ado.net,文件,
参考
EXCEL里面,默认的情况下,对于字段内容长度超过15位的数字,后面的内容会全部被搞成0,真是自作多情啊! 例如:常见的,我们输入18位的身份证号码:111111111111111111,就会变成 111111111111111000 而且,显示也用科学计数方式显示,真是太恶心了 最近有个需求,导出一些人的个人资料到 CSV 或者 EXCEL,在导出身份证时,就遇到了这个垃圾问题。 经过一番查找资料,找到了解决方法: 1.对于导出 CSV 文件,在禁止转义的内容前,加上一个TAB符号,C# 里面是 \t 2.对于EXCEL文件, 在禁止转义的内容前,加上一个半角单引号,' 符号 如上就OK了,希望其他人少走弯路吧
C#中的委托和事件(续) C#中的委托和事件 C# 委托知识总结|
How to Create a Notify Icon in C# without a form
C# Language Specification (MSDN) (英文)
ECMA-334 C# Language Specification (.pdf) (英文)
ISO/IEC 23270:2003 C# Language Specification (英文)
SharpDevelop: 开源的 C# IDE SharpDevelop浅析_序|
C#速成
http://bbs.dvbbs.net/dispbbs.asp?BoardID=3&ID=452695&replyID=&skin=1
C#和.Net的初步研究 2004-2-10 兖矿集团
C#断想 荣耀 2002秋