Introduction+to+Csharp
- 格式:ppt
- 大小:230.00 KB
- 文档页数:41
CSharp学习资料第一章.NET体系结构简介体系主要由以下两部分组成Framework类库.NETFramework类库是一个内容丰富的类集合,它可以完成以前要通过WindowAPI来完成的绝大多数任务。
CLR是.NETFramework的核心执行环境,也称.NET运行库。
1.2CLR概述CLR主要负责“托管代码”的编译和运行。
在.NET中代码的编译分为两个阶段,如图1.1所示:1、把源代码编译为Microoft中间语音(MSIL);2、CLR把MSIL编译为平台专用的代码。
某.cC#源代码编译器CLR激活JIT目标机器MSIL微软(Window中间语音、Linu某等)图中C#语音的执行过程1.21托管代码(ManagedCode)托管代码是由CLR运行环境(不是直接由操作系统)执行的代码。
托管代码的优点:平台无关性提高性能语音的互操作性1.22非托管代码(UnmanagedCode)非托管代码是由操作系统直接执行的代码。
非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
非托管代码有汇编语音、C语音等。
托管代码和非托管代码区别:前者运行效率稍低,代码编写容易,开发效率高;后者运行效率高,代码编写较难,开发效率低。
第二章面向对象语言C#基础2.1C#简介2.11第一个C#程序(控制台应用程序)uingSytem;//引用命名空间namepaceBitPC.CSharp.Baic//定义命名空间{claMyFirtCSharpCla//引用类类型{publictaticvoidMain()//方法{Conole.WriteLine(“ThiimyfirtC#program!”);//输出无参字符串//输出带参数的字符串Conole.WriteLine(“{0},你好,你的性别是{1}的!”,”唐健”,”男”);Conole.ReadLine();return;}}}2.2变量2.21变量的定义及初始化在C#中声明变量使用的语法:数据类型变量;例如:inti;变量只能先定义后使用;定义变量后必须初始化才能使用;变量要占用一定字节数的内存单元,以上声明会在堆栈中给i分配4个字节。
C#,深入浅出全接触目录表一、什么是C#?二、Java与C#三、C#的主要特征四、安装运行环境五、C#编辑器六、C#的程序结构七、C#和名称空间八、C#中一个经典例程的编写与编译九、C#编程实战演习ABC1、使用Visual Studio .NET编写C#程序2、使用Visual C#创建Windows应用程序3、创建C#类库(Dll)一、什么是 C#?C# 是由Microsoft开发的一种新型编程语言,由于它是从C和C++ 中派生出来的,因此具有C++的功能。
同时,由于是Microsoft公司的产品,它又同 VB一样简单。
对于web开发而言,C#象 Java,同时具有Delphi的一些优点。
Microsoft宣称:C#是开发.NET框架应用程序的最好语言。
二、Java与 C#要学习C#,不能不首先看一看Java语言。
相对于其他编程语音,Java有一个无庸置疑的优点:用户以及编译器第一次不必了解生成可执行代码的特定CPU细节。
Java引入了一个编译代码中间层,叫做字节代码,并使用一个虚拟抽象的机器,而不是一个真实的机器。
当Java 编译器结束了一个源文件的编译后,你所得到的不是可以立即在一个给定平台上运行的代码,而是可以在任何真实的平台上运行的字节代码,唯一的条件就是这个平台要理解和支持Java。
这些发展包含着一个文化的变革。
作为一个开发人员,你只需要确定Java虚拟机(JVM)提供的抽象层,不同的OS销售商负责执行代码层,从而将中立于平台的字节代码映射到主机平台的机构中。
在这种情况下,Java似乎是统一分布式计算机世界的领袖候选人了。
“编写一次,永远运行”(并且无论在哪里)一度成为Java诱人但却真实的口号。
那么为什么说Java只是“似乎”是一个好东西呢?跨平台理论的发展很好地证明了这一点。
我们看到,将Java代码从一个平台移植到另一个平台—Java这个语言最重要和最受吹捧的特点—并不象宣传的那样容易。
3. 基本概念3.1 应用程序启动具有入口点 (entry point) 的程序集称为应用程序 (application)。
应用程序运行时,将创建新的应用程序域(application domain)。
同一台计算机上可能会同时运行着同一个应用程序的若干个实例,此时,每一个实例都拥有各自的应用程序域。
应用程序域用作应用程序状态的容器,以此隔离应用程序。
应用程序域作为应用程序中和它使用的类库中所定义的类型的容器和边界。
同一个类型若被加载到不同的应用程序域中就成为各自独立的客体,由它们在各自应用程序域中产生的实例亦不可直接共享。
例如,对于这些类型的静态变量,每个应用程序域都有自己的副本,并且这些类型的静态构造函数在每个应用程序域中也要(最多)运行一次。
关于如何处理程序域的创建和销毁,各实现可以按具体情况确定自己的策略或机制。
当执行环境调用指定的方法(称为应用程序的入口点)时发生应用程序启动 (application startup)。
此入口点方法总是被命名为Main,可以具有下列签名之一:static void Main() {...}static void Main(string[] args) {...}static int Main() {...}static int Main(string[] args) {...}如上所示,入口点可以选择返回一个int值。
此返回值用于应用程序终止(第 3.2 节)。
入口点可以包含一个形参(可选)。
该参数可以具有任意名称,但参数的类型必须为string[]。
如果存在形参,执行环境会创建并传递一个包含命令行实参的string[]实参,这些命令行实参是在启动应用程序时指定的。
string[]参数永远不能为 null,但如果没有指定命令行参数,它的长度可以为零。
由于 C# 支持方法重载,因此类或结构可以包含某个方法的多个定义(前提是每个定义有不同的签名)。
但在一个程序内,没有任何类或结构可以包含一个以上的名为Main的方法,因为 Main 的定义限定它只能被用作应用程序的入口点。
因为我们不光要写代码,而且要写好的代码,因此我们必须强调基础: 离散数学、算法与数据结构、操作系统、计算机体系结构、网络、编译原理等。
很多时候技术人员之间能力的高低,很可能就会取决于这写基础。
有朋友告诉我,这些计算机科学的基础的意义不仅仅在于知识本身,它们还能够让人的思维更符合计算机科学的发展和变革第三章变量和表达式3.1C#的基本语法C#编译器不考虑空格、回车符或tab字符。
C#是一种块结构的语言,所有语句都是代码块的一部分,用“{ … }”来界定。
注意花括号不需要附带分号。
代码块可以互相嵌套,被嵌套的块要缩进得多一些。
C#代码是区分大小写的。
3.2C#控制台应用程序的基本结构使用#region和#endregion关键字,可以定义展开和折叠的代码区域的开头和结尾。
以#开头的任意关键字实际上都是一个预处理命令。
3.3变量声明变量的C#语法是,指定类型和变量名:<type> <name>;3.3.1简单类型1、用N位来存储的变量可以表示任何介于0到(2N-1)之间的数。
大于这个值的数不能存储在这个变量中。
数值类型过多的原因是要用合适的数值类型存储适合的变量,不要浪费内存也不要出现不能满足变量范围的情况。
Byte:0—255; short:0—65535; int:0—4294967295……………2、这些类型中的每一种都利用了.NET Framework中定义的标准类型。
使用标准类型可以在语言之间交互操作。
在C#中这些类型的名称是Framework中定义的类型的别名,也就是说这些类型都是在Framework中。
3、浮点数变量类型:float/ double /decimal前两种用+/-m×2e,而decimal用+/-m×10e M和e都有最小值和最大值。
4、注意给字符串赋值时,必须小心换行。
C#编译器会拒绝分布在多行上的字符串.如果要多行显示可以使用\n. str=“this is \nmy mouse!”;3.3.2变量的命名变量名的第一个字符必须是字母,且不能使用特定含义的字符,系统的关键字等。
csharp类、引⽤类型(class)与结构、值类型(struct)的区别数据在内存中的存储位置,取决于它的数据类型,在C#中,分为值类型和引⽤类型,值类型的数据存储在内存中的堆栈中,每个变量或程序都有⾃⼰的堆栈,不可以共⽤⼀个堆栈地址。
当数据⼀个值类型的变量传递到另⼀个相同类型的变量时,会在堆栈中分配两个不同的地址。
⽽引⽤类型的数据存储在内存中的堆中,可以不同的变量或程序共同使⽤同⼀个位置的数据。
当数据从⼀个引⽤类型的变量传递到另⼀个相同类型的变量时,只是把这个变量的引⽤地址传递给新的变量,同时引⽤当前堆中存储的数据。
可以通过实例得到详细结论:结论:输出结果:Dimensions of ref1 are : 3 (4)Change Dimensions of ref1Dimensions of ref1 now are : 10 (50)TrueDimensions of val1 are : 3 (4)Change Dimensions of val1Dimensions of val1 now are : 3 (4)False⽽ref(引⽤类型)的变量传递后,改变第⼀个,第⼆个变量随之改变,是因为两个变量同时引⽤堆中的⼀个地址的内容,当⼀个变量改变,对应与内存中的堆也随之改变,⽽另外的⼀个变量也随之改变。
当val(值类型)的变量传递后,改变第⼀个变量,不会影响第⼆个变量的值,这是因为,当变量传递时,是在堆栈中⼜分配了⼀个地址给新的变量,所以这个两个变量在传递发⽣后,不再有关系。
类与结构的差别C#中有两种类型的数据,⼀种是值类型数据,⼀种是引⽤类型数据。
⾸先说说什么类型是值类型,例如:int、float、bool之类的基础类型,以及⽤struct定义的类型,如:DateTime。
除此外,如string,数组,以及⽤class定义的类型等都是引⽤类型。
具体对⽐如下:值类型引⽤类型内存分配地点分配在栈中分配在堆中效率效率⾼,不需要地址转换效率低,需要进⾏地址转换内存回收使⽤完后,⽴即回收使⽤完后,不是⽴即回收,等待GC回收赋值操作进⾏复制,创建⼀个同值新对象只是对原有对象的引⽤函数参数与返回值是对象的复制是原有对象的引⽤,并不产⽣新的对象类型扩展不易扩展容易扩展,⽅便与类型扩展值类型与引⽤类型结构是值类型:值类型在栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构,通过使⽤结构可以创建更多的值类型类是引⽤类型:引⽤类型在堆上分配地址堆栈的执⾏效率要⽐堆的执⾏效率⾼,可是堆栈的资源有限,不适合处理⼤的逻辑复杂的对象。
Csharp命名规则说明1.1命名概述名称应该说明“什么”而不是“如何”。
通过避免使用公开基础实现(它们会发生改变)的名称,可以保留简化复杂性的抽象层。
例如,可以使用 GetNex tStud ent(),而不是 GetNex tArra yElem ent()。
命名原则是:选择正确名称时的困难可能表明需要进一步分析或定义项的目的。
使名称足够长以便有一定的意义,并且足够短以避免冗长。
唯一名称在编程上仅用于将各项区分开。
表现力强的名称是为了帮助人们阅读;因此,提供人们可以理解的名称是有意义的。
不过,请确保选择的名称符合适用语言的规则和标准。
以下几点是推荐的命名方法。
1、避免容易被主观解释的难懂的名称,如方面名 Analyz eThis(),或者属性名xxK8。
这样的名称会导致多义性。
2、在类属性的名称中包含类名是多余的,如 Book.BookTi tle。
而是应该使用Book.Title。
3、只要合适,在变量名的末尾或开头加计算限定符(Avg、Sum、Min、Max、Index)。
4、在变量名中使用互补对,如 min/max、begin/end 和 open/close。
5、布尔变量名应该包含 Is,这意味着 Yes/No 或 True/False值,如 fileIs Found。
6、在命名状态变量时,避免使用诸如 Flag 的术语。
状态变量不同于布尔变量的地方是它可以具有两个以上的可能值。
不是使用 docume ntFla g,而是使用更具描述性的名称,如 docume ntFor matTy pe。
(此项只供参考)7、即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。
仅对于短循环索引使用单字母变量名,如 i 或 j。
C#基础知识.NET/DOTNET:一般指.NET FRAMEWORK框架,一种平台,一种技术C#(sharp):一种编程语言,可以开发基于.NET平台的应用一个解决方案下面可以有多个项目,项目可以包含多个文件,文件中是我们写的程序在文件中,命名空间中可以包含类,类中可以包含方法,方法中是我们写的程序Main方法是我们程序的入口方法:当我们执行程序时候会首先找到Main方法,从Main方法的第一句程序开始执行,当Main方法执行完成后,程序结束。
.sln是解决方案的文件,今天写的第一句话:Console.WriteLine("你想写的内容!");第二句话:Console.ReadKey();当程序执行到Console.ReadKey();的时候,程序会停在这里,等待用户从键盘上输入一个键盘,用户输入这个键之后,程序才继续执行。
在C#中,每一句话都要一分号结束。
#region和#endregion可以折叠一段代码变量:代表着一块内存空间,我们可以通过变量名称向内存存取数据,有变量就不需要我们记忆复杂的内存地址。
在学习一句话Console.WriteLine()用于让用户从键盘上输入一句话,当程序执行到下面这句话,就会暂停,然后等待用户从键盘上输入一句话,按下回车继续执行。
如果想得到用户输入内容,就需要用户定义一个string类型的变量,写在下面这句话前面接收用户输入的内容。
转义字符是一个字符,可以赋值给例如char这样的类型;它有一个\+一个字母来组成具有特殊意义的一个字符;常用的转义字符有:\n换行 \b相当于backspace退格 \t tab由多个空格组成的一个字符,具有行与行之间的对齐功能,@字在字符串前面表示不转义,其都两种定义1)字符串中如果有\,则不在理解为转义符2)使字符串可以换行3)如果在字符串前面加上@符号,在字符串上用两个双引号代表一个双引号Decimal类型默认的无法转换成double类型注意:赋值运算符/算术运算符在进行运算时,要参与运算的操作数的类型必须相同,并且其运算结束也与操作数的类型相同。
Csharp的类型转换一.强制转换(int):(int)表示显式强制转换,是一种类型转换。
当我们从int 到long、floa、double、decimal时,都可以使用隐式转换,而当我们从long到int(以及其他类似的转换是)就需要使用显式转换,否则会产生编译错误。
String stringval=”123”;Int i =(int)stringval; //是错误的,用()不能是string 直接转换为int而且(int)stringval;也是错误的;String stringval;Int i= 123;Stringval=(int)i;//也是错误的,用()不能使int变成string①该转换方式主要用于数字的转换②该转换对浮点数是,会失去起精度(即直接省略小数部分)③用来处理char类型的值,会返回ASCⅡ的值二.Int.Parse()将数字类型的字符串转换为int。
括号内只能是字符串,该函数只能处理字符串,而且字符串的内容只能在int可表示的范围内。
若参数string的值是:①是nul,抛出异常;②是“”(空/string.empty),抛出异常;③string的格式不是数字类型的,则抛出异常:字符串格式不对;④若超出int的表示范围([MinValue,MaxValue]),抛出异常Int.pause(4.5);//这届报错:字符串的格式不正确Double.parse(”4.5”);//正确Double.parse(”4”);//正确格式:*.parse() sbyte——>long 和float——>decimal注意:没有string.Pause()三.Int.TryParse(string s , out int result)该方式也是将数字内容的字符串转为int类型,但是该方式比int.Parse优越的地方,就是它不会出现异常。
如果转换成功该函数返回true,如果转换失败该函数返回false。
第1篇第一部分:基础知识1. 什么是C?- 解答: C(读作“C Sharp”)是一种由微软开发的高级编程语言,属于.NET 框架的一部分。
它主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序和游戏。
C结合了C和C++的语法,同时引入了面向对象的特性,如封装、继承和多态。
2. C的特点有哪些?- 解答:- 面向对象:支持封装、继承和多态。
- 类型安全:编译时类型检查。
- 强大的类库:.NET框架提供了丰富的类库。
- 易于学习:语法简单,易于上手。
- 跨平台:可以通过.NET Core运行在多种操作系统上。
3. 什么是垃圾回收?- 解答:垃圾回收(Garbage Collection,GC)是.NET框架中自动管理内存的一种机制。
当对象不再被引用时,GC会自动回收这些对象的内存,从而避免内存泄漏。
4. 什么是引用类型和值类型?- 解答:- 引用类型:如类(Class)、接口(Interface)、委托(Delegate)和数组(Array),引用类型存储的是对象的引用。
- 值类型:如结构体(Struct)、枚举(Enum)和基本数据类型(int、float、bool等),值类型存储的是实际的数据值。
5. 解释一下C中的装箱和拆箱操作。
- 解答:装箱(Boxing)是将值类型转换为引用类型的过程。
拆箱(Unboxing)是将引用类型转换回值类型的过程。
装箱通常发生在值类型作为参数传递给引用类型的方法时,或者需要将值类型存储在引用类型的变量中。
第二部分:面向对象编程6. 什么是继承?请举例说明。
- 解答:继承是一种允许一个类继承另一个类的属性和方法的技术。
例如,一个基类`Animal`可以有一个派生类`Dog`,`Dog`类继承了`Animal`类的所有属性和方法,并可以添加自己的特性和方法。
7. 多态是什么?请举例说明。
- 解答:多态是指允许不同类的对象对同一消息作出响应。
例如,一个基类`Shape`可以有一个派生类`Circle`和`Rectangle`,这两个类都实现了`Draw`方法。
实验指导实验一 VS2005集成开发环境一、实验目的熟悉VS2005开发环境,掌握如何在此环境下开发简单的.NET应用程序,以及调试程序的基本操作技巧二、实验要求1、熟悉环境;2、按照C#规范正确写源程序3、能得到正确的程序运行结果三、实验原理C#程序开步骤:编辑源程序—>编译 运行四、主要仪器及耗材计算机及软件五、实验内容与步骤1.使用创建一控制台程序,输出自己的姓名;2.使用创建一WinForm程序,输出自己的姓名;六、实验注意事项应分析源程序,并注意运行结果是否为预期结果。
七、思考题环境有何优点?2.C#的程序结构?实验二最简单的C#程序开发一、实验目的1.练习C#变量声明和赋值方法、类型转换方法2.初步学习调试方法二、实验要求1.熟悉环境;2.按照C#规范正确写源程序3.能得到正确的程序运行结果三、实验原理1.C#程序开发过程C#的程序结构由注释、编译预处理和程序主体组成。
(1) 注释:注释是写程序者为读程序者作的说明与注解,仅供人阅读程序使用,C++编译器把所有注释都视为空白。
(2) 编译预处理:每个以符号“﹟”开头的行,称为编译预处理行。
(3) 程序主体:C#用函数组织过程,函数定义是C++程序的主体,不同的程序由不同的函数按层次结构组织而成。
程序主体基本形式2.数据类型①C#的数据类型②常量与变量实型常量:带有小数点的数,float、double等;整型常量:不带小数点的数,int、long int等;字符型常量:用一对单引号括起来的一个或多个字符,如’A’;字符串常量:是括在一对双引号内的字符序列,如”Hello”;枚举常量enum color{red,white,green}。
变量具有以下特点:(1)变量是指程序中使用的一个被命名的存储区域(称程序实体),用以存放可由程序修改的值,其名称为变量名,其值称为变量值。
(2)每个变量应属于一个特定的类型。
符号常量:在声明语句中,用const修饰的标识符将指称一个“只读的”程序实体,称为符号常量,如语句:const float Pi=3.1415926。