c#基础与实例教程最简单的C#快速入门教程
在一小时内学会C#。使用例程,简单却完整的探索C#语言的构造和特点。本文特别适合有C++基础却没有太多精力学习C#的读者。
简介
C#是一种具有C++特性,Java样式及BASIC快速建模特性的编程语言。如果你已经知晓C++语言,本文将在不到一小时的时间内带你快速浏览C#的语法。如果熟悉Java语言,Java的编程结构、打包和垃圾回收的概念肯定对你快速学习C#大有帮助。所以我在讨论C#语言构造的时候会假设你知道C++。
c#基础与实例教程最简单的C#快速入门教程,本文通过一系列例程以简短但全面的方式讨论了C#语言构造和特性,所以你仅需略览代码片刻,即可了解其概念。
注意:本文不是为C#师而写。有很多初学者的C#文章,这只是其中之一。
接下来关于C#的讨论主题:
编程结构命名空间数据类型变量运算符与表达式枚举语句类与结构修饰符属性接口函数参数数组索引器装箱与拆箱委托继承与多态以下主题不会进行讨论:
C++与C#的共同点诸如垃圾回收、线程、文件处理等概念数据类型转换异常处理.NET库
编程结构
和C++一样,C#是大小写的。半角分号(;)是语句分隔符。和C++有所区别的是,C#中没有单独的声明(头)和实现(CPP)文件。所有代码(类声明和实现)都放在扩展名为cs的单一文件中。
C#中所有内容都打包在类中,而所有的类又打包在命名空间中(正如文件存与文件夹中)。和C++一样,有一个主函数作为你程序的入口点。C++的主函数名为main,而C#中是大写M打头的Main。
类块或结构定义之后没有必要再加一个半角分号。C++中是这样,但C#不要求。
命名空间
每个类都打包于一个命名空间。命名空间的概念和C++完全一样,但我们在C#中比在C++中更加频繁的使用命名空间。你可以用点(.)定界符访问命名空间中的类。的HelloWorld程序中北大青鸟,MyNameSpace是其命名空间。
#include符被后跟命名空间名的using关键字代替了。正如的usingSystem。System是最基层的命名空间,所有其他命名空间和类都包含于其中。System命名空间中所有对象的基类是Object。
变量
除了以下差异,C#中的变量几乎和C++中一样:
1.C#中(不同于C++)的变量,总是需要你在访问它们前先进行初始化,否则你将遇到编译时错误。故而,不可能访问未初始化的变量。2.你不能在C#中访问一个“挂起”指针。3.超出数组边界的表达式索引值同样不可访问。4.C#中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成的。
数据类型所有C#的类型都是从object类继承的。有两种数据类型:
1.基本/内建类型2.用户定义类型
以下是C#内建类型的列表:
用户定义类型文件包含:
以下类型继承时均分配内存:
1.值类型2.参考类型
值类型
值类型是在堆栈中分配的数据类型。它们包括了:
?除字符串,所有基本和内建类型?结构?枚举类型
引用类型
引用类型在堆(heap)中分配内存且当其不再使用时,将自动进行垃圾清理。和C++要求用户显示创建delete运算符不一样,它们使用新运算符创建,且没有delete运算符。在C#中它们自动由垃圾回收系统回收。
引用类型包括:
?类?接口?集合类型如数组?字符串
枚举
C#中的枚举和C++完全一样。通过关键字enum定义。
除了内存分配的不同外,类和结构就和C++中的情况一样。类的对象在堆中分配,并使用new关键字创建。而结构是在栈(stack)中进行分配。C#中的结构属于轻量级快速数据类型。当需要大型数据类型时,你应该创建类。
属性
如果你熟悉C++面向对象的方法,你一定对属性有自己的认识。对C++来说,前面例子中Date类的属性就是day、month和year,而你添加了Get和Set方法。C#提供了一种更加便捷、简单而又直接的属性访问方式。
readonly修饰符仅用于修饰类的数据。正如其名字说的,一旦它们已经进行了写操作、直接初始化或在构造函数中对其进行了赋值,readonly数据就只能对其进行读取。readonly和const数据不同之处在于const要求你在声明时进行直接初始化。看下面的例程:复制内容到剪贴板
数组在C#中比C++中要高级很多。数组分配于堆中,所以是引用类型的。你不能访问数组边界外的元素。所以C#防止你引发那种bug。同时也提供了迭代数组元素的帮助函数。foreach是这样的迭代语句之一。C++和C#数组的语法差异在于:
方括号在类型后面而不是在变量名后面创建元素使用new运算符C#支持一维、和交错数组(数组的数组)
索引器
索引器用于书写一个可以通过使用[]像数组一样直接访问集合元素的方法。你所需要的只是指定待访问实例或元素的索引。索引器的语法和类属性语法相同,除了接受作为元素索引的输入参数外。
例子:
C++中的引用参数是通过指针或引用运算符&传递的。C#中的引用参数更不易出错。你可以传递一个引用地址,你传递一个输入的值并通过函数得到一个输出的值。因此引用参数也被称为输入-输出参数。
你不能将未初始化的引用参数传递给函数。C#使用关键字ref指定引用参数。你同时还必须在传递参数给要求引用参数的函数时使用关键字ref。
输出参数是只从函数返回值的参数。输入值不要求。C#使用关键字out表示输出参数。
C#中的数组使用关键字params进行传递。一个数组类型的参数必须总是函数最右边的参数。只有一个参数可以是数组类型。你可以传送任意数量的元素作为数组类型的参数。看了下面的例子你可以更好的理解:
注意:使用数组是C#提供用于可选或可变数量参数的唯一途径。
运算符和表达式跟C++中完全一致。然而同时也添加了一些新的有用的运算符。有些在这里进行了讨论。
as运算符检查操作数的类型是否可转换或是相等(as是由is运算符完成的),如果是,则处理结果是已转换或已装箱的对象(如果操作数可以装箱为目标类型,参考装箱/拆箱)。如果对象不是可转换的或可装箱的,返回值为null。看看下面的例子以更好的理解这个概念。复制内容到剪贴板代码:Shapeshp=newShape();Vehicleveh=shpasVehicle;//返回null,类型不可转换
除了些许附加的新语句和修改外,C#的语句和C++的基本一致。
以下是新的语句:
用于迭代数组等集合。
在线程中使代码块称为重点部分。(译注:lock关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后该锁。lock确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被),直到该对象被。)
用于数字操作中的溢出检查。
例子:复制内容到剪贴板
1.现在在执行一条case语句后,程序流不能跳至下一case语句。之前在C++中这是可以的。
委托
委托让我们可以把函数引用保存在变量中。这就像在C++中使用typedef保存函数指针一样。
委托使用关键字delegate声明。看看这个例子,你就能理解什么是委托:
继承与多态
c#基础与实例教程C#只允许单一继承。多重继承可以通过接口达到。
使用“new”隐藏父类函数
多态性认为Rectangle类的Draw方法是和Shape类的Draw方法不同的另一个方法,而不是认为是其多态实现。所以为了防止父类和子类间的命名冲突,我们只有使用new修饰符。
注意:你不能在一个类中使用一个方法的两个版本,一个用new修饰符,另一个用override或virtual。就像在的例子中,我不能在Rectangle类中增加另一个名为Draw的方法,因为它是一个virtual或override的方法。同样在Square类中,我也不能重写Shape类的虚方法Draw。
调用基类
如果子类的数据和基类中的有同样的名字,为了避免命名冲突,基类和函数使用base关键字进行访问。看看下面的例子,基类构造函数是如何调用的,而数据又是如何使用的。复制内容到剪贴板代码:publicChild(intval):base(val){myVar=5;base.myVar;}
前景展望
本文仅仅是作为C#语言的一个快速浏览,以便你可以熟悉该语言的一些特性。尽管我尝试用实例以一种简短而全面的方式讨论了C#几乎所有的主要概念,但我认为还是有很多内容需要增加和讨论的。以后,我会增加更多的没有讨论过的命令和概念,包括事件等。我还想给初学者写一下怎么用C#进行Windows编程
C#基础与实例教程最简单的C#快速入门教程【转自:http://www.82011433.com/Html/?6982.html】