入门经典教程ppt课件

上传人:钟*** 文档编号:2893555 上传时间:2019-12-03 格式:PPT 页数:430 大小:8.01MB
返回 下载 相关 举报
入门经典教程ppt课件_第1页
第1页 / 共430页
入门经典教程ppt课件_第2页
第2页 / 共430页
入门经典教程ppt课件_第3页
第3页 / 共430页
点击查看更多>>
资源描述
第1章 C#与NET平台介绍 本章目标,了解.NET Framework 的结构 理解.NET Framework 的基本概念 CLR JIT CTS MSIL 了解 .NET Framework 命名空间 了解C#程序的基本结构,1,1 C#语言的由来,在过去的二十年里,C和C+已经成为在商业软件的开发领域中使用最广泛的语言。它们为程序员提供了十分灵活的操作,不过同时也牺牲了一定的开发效率。与VB等语言相比,同等级别的C/C+应用程序往往需要更长时间来开发。由于C/C+语言的复杂性,许多程序员都试图寻找一种新的语言,希望能在功能与效率之间找到一个更为理想的权衡点。 VB以牺牲灵活性的代价来提高效率。可是这些灵活性正是C/C+程序员所需要的。这些解决方案对编程人员的限制过多(如屏蔽一些底层代码控制的机制),所提供的功能难以令人满意。这些语言无法方便地同早先的系统交互,也无法很好地和当前的网络编程相结合。,2,对于C/C+用户来说,最理想的解决方案无疑是在快速开发的同时又可以调用底层平台的所有功能。他们想要一种和最新的网络标准保持同步并且能和已有的应用程序良好整合的环境。另外,一些C/C+开发人员还需要在必要的时候进行一些底层的编程。 C# (C sharp) 是对这一问题的解决方案。C#是一种新的、面向对象的编程语言。它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。,3,C#语言的特点: C#语言是Microsoft发布的一种全新的编程语言,是其.Net战略的一枚重要棋子。 C#语言是面向对象的、现代的编程语言,用C#编写的应用程序可以充分利用.Net的框架体系带来的优点.既可以用来编写基于通用网络协议的Internet服务软件,也可以编写各种数据库、网络服务应用程序和Windows窗口界面程序。 C#继承了C/C+的优点和灵活性,能够充分利用OS系统的底层功能,同时又具备了完全的面向对象特性。可以让初学者直接了解面向对象编程的各种概念,学习现代的编程思想和手段。,4,2 .NET代码的编译 语言特定的编译器和运行库,5,代码 被执行,IL + 元数据,C L R,IL 和 CLR 的使用 Intermediate Language Common Language Runtime,6,编译执行 .NET 程序,7,Microsoft 中间语言,MSIL + 元数据,机器 代码,代码 被执行,CLR,MSIL,帮助语言实现互操作,IL 不是字节代码,但很接近字节代码。因此,执行应用程序时,IL 到机器码的转换速度非常快!,通过 CLR将 MSIL 转换为具体 CPU 的代码,CPU 无关的指令集,语言 编译器,.NET 源 代码,8,程序集,client.exe,client.exe,clientlib.dll,client.exe,module,9,IL语言范例,IL_0000: nop IL_0001: call IL_0006: nop IL_0007: ldc.i4.0 IL_0008: call IL_000d: nop IL_000e: ldnull IL_000f: ldftn IL_0015: newobj IL_001a: call IL_001f: nop IL_0020: newobj IL_0025: call IL_002a: nop IL_002b: newobj IL_0030: throw,10,通用语言运行时CLR,11,.NET的语言互操作性: 不同语言编写的代码可互相调用 C#的平台移植性: 框架 JIT编译器(Just In Time, 即时编译器),12,3 .NET Framework 简介,.NET Framework类似于JVM .NET Framework 两个主要组件: 通用语言运行时 (CLR) 统一的类库集 .NET的类库: 线程 文件输入/输出 (I/O) 数据库支持 XML 解析 数据结构,13,.NET Framework 的体系结构,Visual Studio .NET,CLR通用语言运行时 (CLR),Base Class Library: IO, Drawing, Threading,Data and XML,XML Web services,Windows Forms,Web Forms,通用语言规范(CLS),VB,C+,C#,JScript,操作系统,.Net Framework 类库 (FCL),14,CLS和CTS,通用语言规范 CLS Common Language Specification 规定所有 .NET 语言都应遵循的规则 生成可与其他语言互操作的应用程序 通用类型系统 (Common Type System, CTS) 包含标准数据类型 包含准则集,CLS、CTS 和 MSIL 紧密配合以实现语言互操作性,15,命名空间就像在文件系统中一个文件夹容纳多个文件一样,可以看作某些类的一个容器。通过把类放入命名空间可以把相关的类组织起来,并且可以避免命名冲突。命名空间既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法) 使用命名空间:using 类似#include,4 命名空间,16,1.H class A ,2.H class A ,3.cpp #include “1.h” #include “2.h” .,3.cpp class A class A ,17,namespace a1 class A ,namespace a2 class A ,3.cs using a1; using a2; a1.A a2.A,18,常用命名空间,19,5 创建“Hello World”应用程序,单击“开始”“程序”“Microsoft Visual Studio .NET 2005”“Microsoft Visual Studio .NET 2005” 此时将打开 VS.NET 2005 的起始页 要创建 C# 控制台应用程序,请从列表中选择 “创建建”“项目”。此时将打开“新建项目”窗口 选择“Visual C# 项目”作为项目类型,选择“控制台应用程序”作为模板,20,C# 模板,Console.WriteLine(“Hello World“);,输出,21,HelloWorld.csproj AssemblyInfo.cs Program.cs,“Hello World”应用程序文件,22,编译和执行 C# 应用程序,要生成 C# 项目,请从菜单中选择“生成” “生成解决方案” 该过程将编译项目中包括的所有文件,编译结果显示在“输出”窗口中 如果结果显示“生成: 1 成功或最新,0失败,0被跳过”,则说明已经成功生成,然后即可交付该应用程序,23,要运行刚才生成的应用程序,请从菜单中选择“调试”“开始执行(不调试)” 输出结果显示在 VS.NET 控制台窗口中,24,C# 应用程序文件夹结构,Visual Studio .NET 2005 创建一个与项目同名的文件夹,此处为“HelloWorld” 该文件夹包含项目文件“HelloWorld.csproj”和其他关联文件 每个新项目都创建了 bin、obj和Properties 三个文件夹。 Bin和obj这两个文件夹下都有一个 Debug 子目录,其中包含可执行文件 HelloWorld.exe 在“解决方案资源管理器”中启用“显示所有文件”选项,可查看“HelloWorld”项目的结构,25,/这是用 C# 编写的一个简单的 HelloWorld 程序 using System; namespace Notepad class HelloWorld static void Main() Console.WriteLine(“Hello World“); ,声明 HelloWorld 类,描述代码的注释,Hello World 程序,程序入口点, Main 的返回类型为 void,控制台类的 WriteLine() 方法用于显示输出结果,导入 System 命名空间,声明命名空间 Notepad,将文件保存为 *.cs,26,说明: 1. 程序一般包括以下几部分: 名称空间的引用:使用using关键字指明引用的名称空间。 名称空间的声明:使用namespace关键字声明名称空间。 类:使用class关键字声明类。 Main方法:Main方法是C# 程序的入口。 2. 类中包含了程序所要用到的数据和所要执行的方法的定义。每个类中可以有: (1)变量声明 (2)构造函数 (3)方法 (4)属性 (5)事件 3. 一个文件中可以有1个或者多个类。 4. 所有语句都以分号“;“结束。,27,C#语言基础,第2章,28,目标,在C#中定义变量和常量 使用C#中的基本数据类型 理解装箱和拆箱的概念 使用C#中的运算符,选择结构和循环结构 定义和使用数组,了解结构和枚举 了解C#中的预处理指令 理解C#中常用的字符串处理方法,29,第一个 C#程序 :HelloWorld,using System; class HelloWorld static void Main( ) Console.WriteLine(“Hello, World!”); ,HelloWorld.cs,30,第一个 C#程序 :HelloWorld,1: using System;,第 1 行:,using 关键字 用来引用.NET框架类库中的资源 通常在程序文件的开头使用 如果程序中需要多种资源,可以使用多次using System 命名空间 System命名空间提供了构建应用程序所需的系统统能的访问,31,第一个 C# 程序 :HelloWorld,2: class HelloWorld 3: 8: ,第 2,3,8 行:,类 在C#或其他面向对象语言中,需要编写类 使用关键字class定义一个类,类的内容放在一对 中 示例中定义了一个名为HelloWorld的类,32,第一个 C# 程序 :HelloWorld,4: static void Main( ) 5: 7: ,第 4,5,7 行:,Main 方法 Main 方法是应用程序的入口点,编译器将由该处开始执行程序 方法体也放在一对 中 每个C#的应用程序都必须包含Main方法,33,4: static void Main( ) 5: 7: ,第 4,5,7 行:,Main方法 static表示Main方法是一个全局方法 void表示Main方法没有任何返回值,即返回值是空 参数放在小括号中定义。此处括号内没有内容,表明Main方法没有任何参数,第一个 C# 程序 :HelloWorld,34,6: Console.WriteLine(“Hello, World!”);,第 6 行:,语句 在C#中要执行的指令 语句之间用;分隔,编译器通过分号来区分多个语句 使用大括号 标识某个代码块的开始和结束,从而可以对语句进行组合。大括号必须成对匹配。,第一个 C# 程序 :HelloWorld,35,6: Console.WriteLine(“Hello, World!”);,第 6 行:,语句 HelloWorld程序的主要目的就是在屏幕上显示一条问候 WriteLine方法用来将问候语写到标准输出设备上。 Console代表标准输出设备- 屏幕,它属于System命名空间 WriteLine方法是Console类的方法。访问类或对象的方法使用 点取符.来完成。 字符串用双引号“ ”表示 字符串“Hello,World”是WriteLine方法的参数,表示屏幕输出 的内容,第一个 C# 程序 :HelloWorld,36,系统预定义类型,37,系统预定义类型,38,字面量,39,int: int iMax = int.MaxValue; int pVal = int.Parse(“100”); short i16 = 50; int i32 = i16; i16 = i32; 错误 i16 = (short)i32; decimal decimal iRate = 3.9834M; iRate = decimal.Round(iRate, 2); /四舍五入 iRate = decimal.Remainder(512.0M, 51.0M);,40,bool bool bt = (bool)1; /错误 char string pattern = “123abcd?”; bool bt; bt = char.IsLetter(pattern, 3); bt = char.IsNumber(pattern, 3); bt = char.IsLower(pattern, 3); bt = char.IsPunctuation(pattern, 7); bt = char.IsLetterOrDigit(pattern, 3);,41,single,double float f = 24567.66f; double d = 124.45; If(Single.IsNaN(1/0) 使用Parse转换数字字符串 short shParse = Int16.Parse(“100“); int iParse = Int32.Parse(“100“); long shParse = Int64.Parse(“100“); decimal dParse=decimal.Parse(“99.99“); float sParse=float.Parse(“99.99“); double dParse=double.Parse(“99.99“);,42,字符串,字符串直接量 string path; path = ”C:note.txt”; path = “C:note.txt”; 字符串操作 索引字符串中的单个字符 string str = “abcd”; char c = str0; 字符串连接 string s1 = “My age = “; int myAge = 28; string cat = s1 + myAge;,43,字符串操作 抽取和定位子串 string poem = “In Xanadu did Kubla Khan”; string poemSeg = poem.Substring(10); poemSeg = poem.Substring(0,9); int index = poem.IndexOf(“I”); index = poem.LastIndexOf(“n”); 比较字符串 bool isMatch; string title = “Ancient Mariner“; isMatch = (title = “ANCIENT AMRINER“); isMatch = (title.ToUpper() = “ANCIENT MARINER“); isMatch = title.Equals(“Ancient Mariner“);,44,String常用方法,C# 中常用的字符串处理方法: Equals() :比较两个字符串的值是否相等 ToLower():将字符串转换成小写形式 IndexOf():查找某个字符在字符串中的位置 SubString():从字符串中截取子字符串 Join():连接字符串 Split():分割字符串 Trim():去掉字符串两边的空格 ,45,实例,将一文件名的扩展名改为.dat。例:1.txt改为1.dat,using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _011 class Program static void Main(string args) string filename = “1.2.txt“; int indexDot = filename.LastIndexOf(.); string extendName = “dat“; filename = filename.Substring(0, indexDot+1); filename += extendName; Console.WriteLine(filename); ,46,String 常用方法应用1,已有如下代码,按要求增加功能:,static void Main(string args) string email; / 电子邮件地址 Console.WriteLine(“请输入你的邮箱:“); email = Console.ReadLine(); Console.WriteLine(“你的邮箱是 0“, email); ,需实现的功能: 1、 输入 yes 时,程序循环执行 2、 兼容以下各种形式 yes(YES、yes、 YeS ) 3、 提取邮箱的用户名,47,using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _011 class Program static void Main(string args) while(1) string email; / 电子邮件地址 Console.WriteLine(“请输入你的邮箱:“); email = Console.ReadLine(); Console.WriteLine(“你的邮箱是 0“, email); Console.WriteLine(“继续输入邮箱吗?“); string input = Console.ReadLine(); if (input.ToUpper() = “YES“) continue; else break; ,while (true),48,String 常用方法应用2,输入一个字符串,输出每个单词,重新用下划线连接输出,使用 Split() 方法分割字符串 使用 Join() 方法连接字符串,49,Split()方法分割字符串,代码分析,splitStrings = inputString.Split( );,/ 将分割后的字符串使用下划线连接在一起 joinString = string.Join(“_“, splitStrings);,返回值为 字符串数组,字符串变量名,参数:分隔符(char型),返回字符串,静态方法,参数1:连接符 参数2:字符串数组,关键代码:,Join()方法连接字符串,50,using System; class Program static void Main(string args) string inputString; inputString = Console.ReadLine(); inputString = inputString.Trim(); string splitStrings = inputString.Split( ); string joinString = string.Join(“_“, splitStrings); Console.WriteLine(joinString); ,如果字符串两边有空格?,51,Format() 方法,两种输出字符串的方式:,string name = “李四“; Console.WriteLine(“My name is “ + name + “,I am“ + 18);,string name = “李四“; Console.WriteLine(“My name is 0 ,I am 1 “, name,18);,格式字符串,变量列表,52,String类的Format()方法用来格式化字符串,关键代码:,record = string.Format( “姓名:0n出生年月:1n身高:2n 血型:3n星座:4n最喜欢的食物:5“, name, birthday, height, bloodType, planet, favourFood); Console.WriteLine(“n这是你的个人档案:“); Console.WriteLine(record);,参数与 WritLine() 方法相似,53,Format() 的语法小结,string myString = string.Format(“格式字符串“, 参数列表);,string myString = string.Format (“0 乘以 1 等于 2 “, 2, 3, 2*3);,格式字符串,代表,参数列表,2乘以3等于6,包括占位符x,54,小结,补充下划线处的占位符,输出五个成语,string yi = “一“; string er = “二“; string san = “三“; string word = string.Format( “独 _ 无 _,_ 心 _ 意,垂涎 _ 尺,略知 _ _,举_ 反 _“, yi, er, san); Console.WriteLine(word);,string yi = “一“; string er = “二“; string san = “三“; string word = string.Format( “独0无1,2心1意,垂涎2尺,略知01,举0反2“, yi, er, san); Console .WriteLine(word);,55,枚举,access modifiers enum :enum_base enum body,class MyApp enum Fabric : int Cotton = 1, Silk = 2, Wool = 4 static void Main() Fabric fab = Fabric.Cotton; int fabNum = (int) fab; string fabType = fab.ToString(); Console.WriteLine(fab); ,整型,默认为int,默认为internal,56,枚举和位标志,namespace MyHelloApp class myApp Flags enum Fabric Cotton = 1, Silk = 2 static void Main() Fabric fab1 = (Fabric)3; Console.WriteLine(fab1.ToString(); ,57,System.Enum的方法,using System; namespace App1 class myApp enum Fabric Cotton = 1, Silk = 2 static void Main() string fabStr = “Cotton“; if (Enum.IsDefined(typeof(Fabric), fabStr) Fabric fab = (Fabric)Enum.Parse(typeof(Fabric), fabStr); Console.WriteLine(Enum.GetName(typeof(Fabric), 2); ,58,变量,static void Main(string args) / 声明布尔型、字符串型、整型、短整型和浮点型变量 bool t = false; short n1 = 30; int n2 = 1200; string str = “jeny“; float n3 = 23.1f; / 显示变量值 Console.WriteLine (“布尔值 = “ + t); Console.WriteLine (“短整型值 = “ + n1); Console.WriteLine (“整型值 = “ + n2); Console.WriteLine (“字符串值 = “ + str); Console.WriteLine (“浮点值 = “ + n3); ,变量中存储的值取决于该变量的类型,59,常量,static void Main(string args) / PI常量PI const float _pi = 3.1415169F; / 由地球引力引起的加速度常量,单位为 cm/s*s const float _gravity = 980; / 钟摆的长度 int length = 60; / 钟摆的周期 double period = 0; / 钟摆周期的计算公式 period = 2 * _pi * Math.Sqrt(length / _gravity); Console.WriteLine (“钟摆的周期为 0 秒“, period); ,声明常量,在表达式中使用常量,const 关键字用于声明常量,60,数组,数组是同一数据类型的一组值 数组属于引用类型,因此存储在堆内存中 数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行 语法: 数据类型, 数组名称 = new 类型 n,; int arrayHere = new int 6;,61,数组,static void Main(string args) int count; Console.WriteLine(“请输入准备登机的乘客人数 “); count=int.Parse(Console.ReadLine(); / 声明一个存放姓名的字符串数组,其长度等于乘客人数 string names = new stringcount; / 用一个 for 循环来接受姓名 for(int i=0; icount; i+) Console.WriteLine(“请输入第 0 个乘客的姓名 “,i+1); namesi=Console.ReadLine(); Console.WriteLine(“已登机的乘客有: “); / 用 foreach 循环显示姓名 foreach(string disp in names) Console.WriteLine(“0“, disp); ,数组声明,初始化数组元素的循环,显示输出的循环,62,一维数组和多维数组都属于矩形数组,而C#所特有的不规则数组是数组的数组,在它的内部,每个数组的长度可以不同,就像一个锯齿形状。 (1)不规则数组的声明 语法形式: type arrayName ; 方括号 的个数与数组的维数相关。 例如: int jagged ; / jagged是一个int类型的二维不规则数组 (2)创建数组对象 以二维不规则数组为例:,3不规则数组,63,struct structEx public int structDataMember; public void structMethod1() /structMethod1 实现 ,自定义数据类型 可以在其内部定义方法 无法实现继承 属于值类型 主要结构:,struct student public int stud_id; public string stud_name; public float stud_marks; public void show_details() /显示学生详细信息 ,结构,数据成员,方法,所有与 Student 关联的详细信息都可以作为一个整体进行存储和访问,64,C# 的基本数据类型,C#中的数据类型分为两个基本类别 值类型 表示实际数据 只是将值存放在内存中 值类型都存储在堆栈中 int、char、结构 引用类型 表示指向数据的指针或引用 包含内存堆中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串,65,C# 的基本数据类型,static void Main(string args) / 声明一个值类型的整型数据类型 int value = 130; Console.WriteLine(“该变量的初始值为 0“, value); Test(value); / 由于该数据类型属于值类型,所以将恢复其初始值 Console.WriteLine(“该变量的值此时为 0“, value); static void Test(int byVal) int t = 20; byVal = t* 30; ,将value的初始值传递给Test()方法,不反映已经改变的val值,而保留原始值,66,C# 的基本数据类型,static void Main(string args) DataType objTest = new DataType (); objTest.Value = 130; / 传递属于引用类型的对象 Test(objTest); / 由于该数据类型属于引用类型,所以会考虑新处理的值 Console.WriteLine(“变量的值为 0“, objTest.Value); static void Test(DataType data) int t = 20; data.Val = temp * 30; ,将 DataTypeTest 的引用传递给 Test(),被传递的value在Test()中改变,反映已经改变的value值,class DataType public int Value; ,67,引用类型和值类型,68,System.Object方法,69,引用类型和值类型的内存分配,值类型存储在运行栈,引用类型存储在托管堆 Apparel myApparel = new Apparel(); Apparel myApparel1 = myApparel;,Class Apparel public double Price = 250.0; public string FabType = “Syn”; ,栈,托管堆,70,装箱与拆箱,装箱即将值类型转换为引用 int age = 17; Object refAge = age 拆箱即将引用类型转换为值类型。 int newAge = (int)refAge; double newAge = (double)refAge; /错误,要具有相同类型,71,运算符和表达式,72,运算符和表达式,73,运算符和表达式,74,运算符和表达式,75,运算符和表达式 9-6,赋值运算符 (=),变量 = 表达式; 例如: 身高 = 177.5; 体重 = 78; 性别 = “m”;,76,运算符和表达式 9-7,一元运算符 (+/-),Variable +; 相当于 Variable = Variable + 1; Variable -; 相当于 Variable = Variable - 1;,77,运算符和表达式,78,运算符和表达式,C# 运算符的优先级,79,选择结构,语法: if () else ,选择结构用于根据表达式的值执行语句,if else,条件:只能是bool类型的值,80,选择结构,switch (“cotton”) case “COTTON”: case “cotton”: break; case 值3: case 值4: break; ,switchcase,表达式可以是int、字符或字符串 C#不允许从一个case块继续执行到下一个case块。每个case块必须以一个跳转控制语句break、goto或return结束 多个case标签可以对应一个代码块,81,循环结构,循环结构用于对一组命令执行一定的次数或反复执行一组命令,直到指定的条件为真。 循环结构的类型 while 循环 do 循环 for 循环 foreach 循环,条件:只能是bool类型的值,82,while 循环反复执行指定的语句,直到指定的条件为真 语法 : while (条件) / 语句 break 语句可用于退出循环 continue 语句可用于跳过当前循环并开始下一循环,while 循环,83,dowhile 循环,dowhile 循环与 while 循环类似,二者区别在于 dowhile 循环中即使条件为假时也至少执行一次该循环体中的语句。 语法 : do / 语句 while (条件),84,for 循环,for 循环要求只有在对特定条件进行判断后才允许执行循环 这种循环用于将某个语句或语句块重复执行预定次数的情形 语法 : for (初始值; 条件; 增/减) /语句 ,85,foreach 循环 2-1,foreach 循环用于遍历整个集合或数组 语法: foreach (数据类型 元素(变量) in 集合或者数组) /语句 ,86,foreach 循环2-2,static void Main(string args) / 存放字母的个数 int Letters = 0; / 存放数字的个数 int Digits = 0; / 存放标点符号的个数 int Punctuations = 0; / 用户提供的输入 string instr; Console.WriteLine(“请输入一个字符串 “); instr = Console.ReadLine(); / 声明 foreach 循环以遍历输入的字符串中的每个字符。 foreach(char ch in instr) / 检查字母 if(char.IsLetter(ch) Letters+; / 检查数字 if(char.IsDigit(ch) Digits+; / 检查标点符号 if(char.IsPunctuation(ch) Punctuations+; Console.WriteLine(“字母个数为: 0“, Letters); Console.WriteLine(“数字个数为: 0“, Digits); Console.WriteLine(“标点符号个数为: 0“, Punctuations); ,为所有计数器设置初始值,接受输入,对输入的每一个 字符都进行循环,使用了所有输入的字符 之后,循环自动终止,87,using System; public class WriteTest public static void Main() int array = 1, 2, 3, 4, 5 ; foreach (int item in array) Console.WriteLine(item); ,using System; public class WriteTest public static void Main() int array = 1, 2, 3, 4, 5 ; foreach (int item in array) item += item; Console.WriteLine(item); ,88,C#的预处理指令2-1,预处理指令是C#编译器在词法分析阶段读取的语句。这些语句可以指示编译器包含或不包含某些代码,甚至可以根据预处理指令的值终止编译。 预处理指令由字符#标识,并且字符#必须是该行的第一个非空字符。 预处理指令最常见的三个用途是:完成条件编译、增加诊断来报告错误和警告、定义代码域。,89,C#的预处理指令2-2,90,#define CLIENT #define DEBUG using System; public class MyApp public static void Main() #if DEBUG & INHOUSE #warning Debug in on. #elif DEBUG & CLIENT #error Debug not allowed in Client Code. #endif ,91,控制台输入和输出,数据输入(Read,ReadLine) Console.Read ()方法 Console.Read方法用来从控制台读取一个字符,其定义如下: Public static int Read(); Read方法返回所读取的字符的Unicode编码值。 注意: Read方法的返回变量是32位的整数,如果需要得到输入的字符,则必须通过数据类型的显式转换才能得到相应的字符。,92,控制台输入和输出,Console.Read () /ReadTest.cs using System; public class ReadTest public static void Main() int i; char ch; i=Console.Read(); ch=(char) i; /显式类型转换 Console.WriteLine(i); Console.WriteLine(ch); ,运行结果: A 65 A,93,控制台输入和输出,Console.ReadLine ()方法 Console.ReadLine方法用来从控制台读取一行字符,定义如下: Public static string ReadLine(); Read方法返回所读取一行字符的字符串。一般情况下,一行输入是指从输入一个字符开始,遇到回车符号为止。,94,控制台输入和输出,/ReadLine.cs using System; using System.Globalization; public class ReadTest public static void Main() int i; double d; string str; str=Console.ReadLine(); /由控制台输入整数字符串 i=int.Parse(str); /整数字符串转换为整数 Console.WriteLine(i); str=Console.ReadLine(); /由控制台输入浮点字符串 d=double.Parse(str); /浮点字符串转换为浮点数 Console.WriteLine(d); ,运行结果: 1234 1234 123.456 123.456,95,控制台输入和输出,数据输出(Write WriteLine) Console.Write ()方法 Console.Write方法用来向控制台输出一个字符,但控制台的光标不会移到下一行。其定义如下: public static void Write(XXX value); public static void Write(string format,object o1,); 注意:格式化format同格式化函数Format中的格式化串类似,其格式如下: N,M:formatstring 其中,字符N表示输出变量的序号,M表示输入变量在控制台中所占的字符空间,如果这个数字为负数,则按照左对齐的方式输出,若为正数,则按照右对齐方式输出。,96,控制台输入和输出,/WriteTest.cs using System; public class WriteTest public static void Main() int i=32767; double d=456.56789; /由控制台。按照十进制输出整数及浮点数 Console.Write(“i=0x0,8:Xtd=1,10:F3”,i,d); /由控制台。按照十六进制输出整数 Console.Write(“i=0x0,-8:Xtd=1,-10:F3”,i,d); 输出结果: i=0x 7FFF d= 456.568i=0x7FFF d=456.568,97,控制台输入和输出,Console.WriteLine()方法 Console.WriteLine方法用来向控制台输出一行字符,即WriteLine方法在输出信息之后,在信息的尾部自动添加“rn”字符,表示回车换行。 public static void WriteLine(XXX value); public static void WriteLine(string format,object o1,); 注意:格式化format同WriteLine中的格式化参数完全一样。,98,控制台输入和输出,/WriteLine.cs using System; public class WriteTest public static void Main() int i=32767; double d=456.56789; /格式化输出 Console.WriteLine(“i=0x0,8:Xtd=1,10:F3”,i,d); Console.WriteLine(“i=0x0,-8:Xtd=1,-10:F3”,i,d); Console.WriteLine(“i=0x0,-8:Dtd=1,-10:C3”,i,d); 输出结果: i=0x 7FFF d= 456.568 i=0x7FFF d=456.568 i=32767 d=¥456.568,99,第3章 C#面向对象设计,100,结构程序设计的不足数据与方法分离,void SpeedUp(int ,double speed = 0;,101,结构程序设计的不足代码不能重用,void main() int doorN_car1 = 2; int color_car1 = 0; int speed_car1 = 100; printf(“%d %d %dn“, doorN_car1, color_car1, speed_car1); int doorN_car2 = 4; int color_car2 = 1; int speed_car2 = 80; printf(“%d %d %dn“, doorN_car2, color_car2, speed_car2); ,102,C#的面向对象特性,所有东西都是对象:变量和方法的集合。 初级特性:OO最基本的概念,即类和对象。 中级特性:OO最核心的概念,即封装、继承和多态。 高级特性:由初级特性和中级特性引出的一些问题,如构造函数的使用、覆盖的规则、静态变量和函数等。,103,初级特性,面向对象技术最基本的概念是类和对象: 类是一个样板,以操作、表示和算法的形式完整地定义了一组对象的行为。它通常也是面向对象语言中的模块化、封装和数据抽象的基础。 对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。,104,抽象数据类型,类实际上为实际的物体在计算机中定义了一种抽象数据类型。 抽象数据类型是仅由数据类型和可能在这个数据类型上进行的操作定义的。 使用者只能通过操作方法来访问其属性,不用知道这个数据类型内部各种操作是如何实现的。,105,class Car public int doorN; public int color; public int speed; public void SpeedUp() speed += 10; class MyApp static void Main() Car car1; car1.doorN = 2; car1.color = 0; car1.speed = 100; Car car2; car2.doorN = 4; car2.color = 1; car2.speed = 80; ,public double speed;,面向对象程序设计封装、代码重用,106,3.2 类与对象,类:C#所有的代码都是在某一个类中,因此不可能在类之外的全局区域有变量和方法。 对象:C#中的对象相当于一块内存区域,保存对象特有的类中所定义的数据。 引用:C#中对于对象的操作全部通过引用进行。,107,3.2.1 类的定义 类使用class关键字声明。采用的形式为: 类修饰符 class 类名称:基类以及实现的接口列表 类体 ;,108,类、对象和引用的声明,声明一个类:访问修饰字 class 类名变量声明,方法声明 class Student long id; / 学号 char gender; /性别 int classID; / 班级号,注意不能用class作属性名 void ChangeClass(int aClassID) /更改班级 声明一个对象引用:类名引用名Student student; 创建一个对象:new 类构造函数 student = new Student(); /如果缺少这一步编译器会报错 使用对象:引用名. 变量名/方法名(参数) student.id = 200328013203194;,109,引用与对象举例,110,引用类似于C+中的对象指针。但又有区别: 在C#中”引用“是指向一个对象在内存中的位置,在本质上是一种带有很强的完整性和安全性的限制的指针。 当声明某个类、接口或数组类型的一个变量时,变量的值总是某个对象的引用或者是null引用。 指针就是简单的地址而已,而引用除了表示地址而外,还是被引用的数据对象的缩影,可以提供其他信息。 指针可以有+、-运算,引用不可以运算。,111,3.1.2 类的成员 1类的成员分类 常量:表示与该类相关联的常量值。 字段:即该类的变量。 类型:用于表示一些类型,它们是该类的局部类型。 方法:用于实现可由该类执行的计算和操作。 属性:用于定义一些命名特性,通过它来读取和写入相关的特性。 事件:用于定义可由该类生成的通知。 索引器:使该类的实例可按与数组相同的(语法)方式进行索引。 运算符:用于定义表达式运算符,通过它对该类的实例进行运算。 实例构造函数:用于规定在初始化该类的实例时需要做些什么。 析构函数:用于规定在永久地放弃该类的一个实例之前需要做些什么。 静态构造函数:用于规定在初始化该类自身时需要做些什么。,112,public class Furniture const double salesTax = .065; private double purchPrice; private string vendor, inventoryID; public Furniture(string vendor, string inventID, double purchPrice
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!