版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#经典教程入门PPT,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提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。,C#语言的特点: C#语言是Microsoft发布的一种全新的编程语言,是其.Net战略的一枚重要棋子。 C#语
3、言是面向对象的、现代的编程语言,用C#编写的应用程序可以充分利用.Net的框架体系带来的优点.既可以用来编写基于通用网络协议的Internet服务软件,也可以编写各种数据库、网络服务应用程序和Windows窗口界面程序。 C#继承了C/C+的优点和灵活性,能够充分利用OS系统的底层功能,同时又具备了完全的面向对象特性。可以让初学者直接了解面向对象编程的各种概念,学习现代的编程思想和手段。,2 .NET代码的编译 语言特定的编译器和运行库,代码 被执行,IL + 元数据,C L R,IL 和 CLR 的使用 Intermediate Language Common Language Runtim
4、e,编译执行 .NET 程序,Microsoft 中间语言,MSIL + 元数据,机器 代码,代码 被执行,CLR,MSIL,帮助语言实现互操作,IL 不是字节代码,但很接近字节代码。因此,执行应用程序时,IL 到机器码的转换速度非常快!,通过 CLR将 MSIL 转换为具体 CPU 的代码,CPU 无关的指令集,语言 编译器,.NET 源 代码,程序集,client.exe,client.exe,clientlib.dll,client.exe,module,IL语言范例,IL_0000: nop IL_0001: call IL_0006: nop IL_0007: ldc.i4.0 IL
5、_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,通用语言运行时CLR,.NET的语言互操作性: 不同语言编写的代码可互相调用 C#的平台移植性: 框架 JIT编译器(Just In Time, 即时编译器),3 .NET Framework 简介,.NET Framework类似于JVM .NET F
6、ramework 两个主要组件: 通用语言运行时 (CLR) 统一的类库集 .NET的类库: 线程 文件输入/输出 (I/O) 数据库支持 XML 解析 数据结构,.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),CLS和CT
7、S,通用语言规范 CLS Common Language Specification 规定所有 .NET 语言都应遵循的规则 生成可与其他语言互操作的应用程序 通用类型系统 (Common Type System, CTS) 包含标准数据类型 包含准则集,CLS、CTS 和 MSIL 紧密配合以实现语言互操作性,命名空间就像在文件系统中一个文件夹容纳多个文件一样,可以看作某些类的一个容器。通过把类放入命名空间可以把相关的类组织起来,并且可以避免命名冲突。命名空间既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法) 使用命名空间:using 类似#i
8、nclude,4 命名空间,1.H class A ,2.H class A ,3.cpp #include “1.h” #include “2.h” .,3.cpp class A class A ,namespace a1 class A ,namespace a2 class A ,3.cs using a1; using a2; a1.A a2.A,常用命名空间,5 创建“Hello World”应用程序,单击“开始”“程序”“Microsoft Visual Studio .NET 2005”“Microsoft Visual Studio .NET 2005” 此时将打开 VS.N
9、ET 2005 的起始页 要创建 C# 控制台应用程序,请从列表中选择 “创建建”“项目”。此时将打开“新建项目”窗口 选择“Visual C# 项目”作为项目类型,选择“控制台应用程序”作为模板,C# 模板,Console.WriteLine(Hello World);,输出,HelloWorld.csproj AssemblyInfo.cs Program.cs,“Hello World”应用程序文件,编译和执行 C# 应用程序,要生成 C# 项目,请从菜单中选择“生成” “生成解决方案” 该过程将编译项目中包括的所有文件,编译结果显示在“输出”窗口中 如果结果显示“生成: 1 成功或最新
10、,0失败,0被跳过”,则说明已经成功生成,然后即可交付该应用程序,要运行刚才生成的应用程序,请从菜单中选择“调试”“开始执行(不调试)” 输出结果显示在 VS.NET 控制台窗口中,C# 应用程序文件夹结构,Visual Studio .NET 2005 创建一个与项目同名的文件夹,此处为“HelloWorld” 该文件夹包含项目文件“HelloWorld.csproj”和其他关联文件 每个新项目都创建了 bin、obj和Properties 三个文件夹。 Bin和obj这两个文件夹下都有一个 Debug 子目录,其中包含可执行文件 HelloWorld.exe 在“解决方案资源管理器”中启用
11、“显示所有文件”选项,可查看“HelloWorld”项目的结构,/这是用 C# 编写的一个简单的 HelloWorld 程序 using System; namespace Notepad class HelloWorld static void Main() Console.WriteLine(Hello World); ,声明 HelloWorld 类,描述代码的注释,Hello World 程序,程序入口点, Main 的返回类型为 void,控制台类的 WriteLine() 方法用于显示输出结果,导入 System 命名空间,声明命名空间 Notepad,将文件保存为 *.cs,说明
12、: 1. 程序一般包括以下几部分: 名称空间的引用:使用using关键字指明引用的名称空间。 名称空间的声明:使用namespace关键字声明名称空间。 类:使用class关键字声明类。 Main方法:Main方法是C# 程序的入口。 2. 类中包含了程序所要用到的数据和所要执行的方法的定义。每个类中可以有: (1)变量声明 (2)构造函数 (3)方法 (4)属性 (5)事件 3. 一个文件中可以有1个或者多个类。 4. 所有语句都以分号;结束。,.,C#语言基础,第2章,目标,在C#中定义变量和常量 使用C#中的基本数据类型 理解装箱和拆箱的概念 使用C#中的运算符,选择结构和循环结构 定义
13、和使用数组,了解结构和枚举 了解C#中的预处理指令 理解C#中常用的字符串处理方法,第一个 C#程序 :HelloWorld,using System; class HelloWorld static void Main( ) Console.WriteLine(“Hello, World!”); ,HelloWorld.cs,第一个 C#程序 :HelloWorld,1: using System;,第 1 行:,using 关键字 用来引用.NET框架类库中的资源 通常在程序文件的开头使用 如果程序中需要多种资源,可以使用多次using System 命名空间 System命名空间提供了构
14、建应用程序所需的系统统能的访问,第一个 C# 程序 :HelloWorld,2: class HelloWorld 3: . 8: ,第 2,3,8 行:,类 在C#或其他面向对象语言中,需要编写类 使用关键字class定义一个类,类的内容放在一对 中 示例中定义了一个名为HelloWorld的类,第一个 C# 程序 :HelloWorld,4: static void Main( ) 5: . 7: ,第 4,5,7 行:,Main 方法 Main 方法是应用程序的入口点,编译器将由该处开始执行程序 方法体也放在一对 中 每个C#的应用程序都必须包含Main方法,4: static void
15、 Main( ) 5: . 7: ,第 4,5,7 行:,Main方法 static表示Main方法是一个全局方法 void表示Main方法没有任何返回值,即返回值是空 参数放在小括号中定义。此处括号内没有内容,表明Main方法没有任何参数,第一个 C# 程序 :HelloWorld,6: Console.WriteLine(“Hello, World!”);,第 6 行:,语句 在C#中要执行的指令 语句之间用;分隔,编译器通过分号来区分多个语句 使用大括号 标识某个代码块的开始和结束,从而可以对语句进行组合。大括号必须成对匹配。,第一个 C# 程序 :HelloWorld,6: Conso
16、le.WriteLine(“Hello, World!”);,第 6 行:,语句 HelloWorld程序的主要目的就是在屏幕上显示一条问候 WriteLine方法用来将问候语写到标准输出设备上。 Console代表标准输出设备- 屏幕,它属于System命名空间 WriteLine方法是Console类的方法。访问类或对象的方法使用 点取符.来完成。 字符串用双引号“ ”表示 字符串“Hello,World”是WriteLine方法的参数,表示屏幕输出 的内容,第一个 C# 程序 :HelloWorld,系统预定义类型,系统预定义类型,字面量,int: int iMax = int.MaxV
17、alue; 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);,bool bool bt = (bool)1; /错误 char string pattern = “123abcd?”; bool bt; bt = char.IsLette
18、r(pattern, 3); bt = char.IsNumber(pattern, 3); bt = char.IsLower(pattern, 3); bt = char.IsPunctuation(pattern, 7); bt = char.IsLetterOrDigit(pattern, 3);,single,double float f = 24567.66f; double d = 124.45; If(Single.IsNaN(1/0) 使用Parse转换数字字符串 short shParse = Int16.Parse(100); int iParse = Int32.Par
19、se(100); long shParse = Int64.Parse(100); decimal dParse=decimal.Parse(“99.99); float sParse=float.Parse(“99.99); double dParse=double.Parse(“99.99);,字符串,字符串直接量 string path; path = ”C:note.txt”; path = “C:note.txt”; 字符串操作 索引字符串中的单个字符 string str = “abcd”; char c = str0; 字符串连接 string s1 = “My age = “;
20、 int myAge = 28; string cat = s1 + myAge;,字符串操作 抽取和定位子串 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 = A
21、NCIENT AMRINER); isMatch = (title.ToUpper() = ANCIENT MARINER); isMatch = title.Equals(Ancient Mariner);,String常用方法,C# 中常用的字符串处理方法: Equals() :比较两个字符串的值是否相等 ToLower():将字符串转换成小写形式 IndexOf():查找某个字符在字符串中的位置 SubString():从字符串中截取子字符串 Join():连接字符串 Split():分割字符串 Trim():去掉字符串两边的空格 ,实例,将一文件名的扩展名改为.dat。例:1.txt改
22、为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 +
23、= extendName; Console.WriteLine(filename); ,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、 提取邮箱的用户名,using Sy
24、stem; 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 inp
25、ut = Console.ReadLine(); if (input.ToUpper() = YES) continue; else break; ,while (true),String 常用方法应用2,输入一个字符串,输出每个单词,重新用下划线连接输出,使用 Split() 方法分割字符串 使用 Join() 方法连接字符串,Split()方法分割字符串,代码分析,splitStrings = inputString.Split( );,/ 将分割后的字符串使用下划线连接在一起 joinString = string.Join(_, splitStrings);,返回值为 字符串数组,字符
26、串变量名,参数:分隔符(char型),返回字符串,静态方法,参数1:连接符 参数2:字符串数组,关键代码:,Join()方法连接字符串,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(_, splitSt
27、rings); Console.WriteLine(joinString); ,如果字符串两边有空格?,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);,格式字符串,变量列表,String类的Format()方法用来格式化字符串,关键代码:,record = string.Format( 姓名:0n出生年月:1n身高:2n
28、血型:3n星座:4n最喜欢的食物:5, name, birthday, height, bloodType, planet, favourFood); Console.WriteLine(n这是你的个人档案:); Console.WriteLine(record);,参数与 WritLine() 方法相似,Format() 的语法小结,string myString = string.Format(格式字符串, 参数列表);,string myString = string.Format (0 乘以 1 等于 2 , 2, 3, 2*3);,格式字符串,代表,参数列表,2乘以3等于6,包括占位
29、符x,小结,补充下划线处的占位符,输出五个成语,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 .
30、WriteLine(word);,枚举,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,枚举和位标志,namespace MyHelloA
31、pp class myApp Flags enum Fabric Cotton = 1, Silk = 2 static void Main() Fabric fab1 = (Fabric)3; Console.WriteLine(fab1.ToString(); ,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),
32、 fabStr) Fabric fab = (Fabric)Enum.Parse(typeof(Fabric), fabStr); Console.WriteLine(Enum.GetName(typeof(Fabric), 2); ,变量,static void Main(string args) / 声明布尔型、字符串型、整型、短整型和浮点型变量 bool t = false; short n1 = 30; int n2 = 1200; string str = jeny; float n3 = 23.1f; / 显示变量值 Console.WriteLine (布尔值 = + t); C
33、onsole.WriteLine (短整型值 = + n1); Console.WriteLine (整型值 = + n2); Console.WriteLine (字符串值 = + str); Console.WriteLine (浮点值 = + n3); ,变量中存储的值取决于该变量的类型,常量,static void Main(string args) / PI常量PI const float _pi = 3.1415169F; / 由地球引力引起的加速度常量,单位为 cm/s*s const float _gravity = 980; / 钟摆的长度 int length = 60;
34、/ 钟摆的周期 double period = 0; / 钟摆周期的计算公式 period = 2 * _pi * Math.Sqrt(length / _gravity); Console.WriteLine (钟摆的周期为 0 秒, period); ,声明常量,在表达式中使用常量,const 关键字用于声明常量,数组,数组是同一数据类型的一组值 数组属于引用类型,因此存储在堆内存中 数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行 语法: 数据类型, 数组名称 = new 类型 n,; int arrayHere = new int 6;,数组,static vo
35、id Main(string args) int count; Console.WriteLine(“请输入准备登机的乘客人数 ); count=int.Parse(Console.ReadLine(); / 声明一个存放姓名的字符串数组,其长度等于乘客人数 string names = new stringcount; / 用一个 for 循环来接受姓名 for(int i=0; i 0) char ch = pathi 1; if (ch = ) break; i-; dir = path.Substring(0, i); name = path.Substring(i); static
36、void Main() string dir, name; /变量作为输出参数无须明确赋值 SplitPath(c:WindowsSystemhello.txt, out dir, out name); Console.WriteLine(dir); Console.WriteLine(name); ,c:WindowsSystem hello.txt,参数数组,在不能确定需要传递多少个参数的时候可以使用params关键字指明一个可变的参数数组。 数组参数的类型必须是一维数组,而且必须是形参表中的最后一个参数。 数组参数始终是值传递方式进行传递,不能将params同ref和out组合。,例如,
37、下面定义一个具有params参数的求平均值函数: public double AVG( params int Nums) int Sum=0; int Count=0; foreach(int n in Nums) Sum+=n; Count+=1; Nums0 = 100; return (Sum/Count); 调用该函数时,可以采用下面的语句: Class1 a = new Class1(); double d = a.AVG(13,27,33,25,78); 另外,还可以传递一个实际的数组: int args = 31,41,46,53,28; double d = a.AVG(arg
38、s); args0 = ?,3.5属性成员,属性主要用于描述和维护类对象的状态。从客户端看,对属性的访问就好像直接访问public字段成员,但在类内部是通过类方法访问的。 创建一个属性包括两步: 1.声明一个字段来存储属性值 2.编写一个属性声明,提供访问接口,属性的建立要使用属性声明,语法如下: 访问修饰符 类型名 属性名 get return 字段; set 私有字段 = value; ,public class checkval private string p_PropVal; /声明一个私有变量p_PropVal public string str1 /声明属性str1 get /返
39、回存储在私有变量中的属性值 return p_PropVal; set /存储属性值到私有变量 if (Convert.ToString(value).Length = 10) p_PropVal = value; else Console.WriteLine(too many words); ,可以说,属性是一种特殊的方法,但属性和方法也有不同之处,主要有: 属性不必使用圆括号,但方法一定使用圆括号。 属性不能制定参数,方法可以指定参数。 属性不能使用void类型,方法则可以使用void类型。 属性使用方法与变量相同。,属性说明,可以创建只读或只写属性,即只有get或set方法。 可以创建静
40、态属性,用static关键字。 静态属性不与特定实例有关联,因此在静态属性的get和set方法内引用this是错误的。 静态属性使用类名访问,并且,与静态属性相配合的私有字段也应该是静态的。,例3-7: public class checkval private static string p_time=00:00:00;/静态私有字段 public static string mytime /静态属性 get return p_time; public static string mytime1 /静态属性 set p_time = value; static void Main() Con
41、sole.WriteLine(checkval.mytime); checkval.mytime1 = 10:2:22; Console.WriteLine(now is + checkval.mytime); ,输出结果为: 00:00:00 now is 10:2:22,3.3.6 this关键字 this引用的是当前实例。 this关键字是一个隐含引用,它隐含于每个类的成员函数中。 this关键字引用类的当前对象,成员通过this关键字可以知道自己属于哪一个实例。 public class Test1 public string str; public void f(string str
42、) this.str = str; public static void Main() Test1 test = new Test1(); test.f(aaa); 静态函数没有this关键字。,将对象作为参数传递到其他方法,例如: public class Test1 public string str = aaa; public void f(Test1 test) str = bbb; Console.WriteLine(test.str); public void f1() f(this); public static void Main() Test1 test = new Test
43、1(); test.f1(); ,索引器,访问修饰符 数据类型 this数据类型 标识符 get; set; ,语法,参数化成员属性:包含set、get方法。 与成员属性不同: 它可以接受1个或多个参数 使用this作为索引器的名字,定义和调用索引器,class Photo string _title; public Photo(string title) this._title = title; public string Title get return _title; ,以 Title 属性表示照片,将照片存放于数组 photos 中,class Album / 该数组用于存放照片 Ph
44、oto photos; public Album(int capacity) photos = new Photocapacity; ,定义和调用索引器 4-2,public Photo thisint index get / 验证索引范围 if (index = photos.Length) Console.WriteLine(索引无效); / 使用 null 指示失败 return null; / 对于有效索引,返回请求的照片 return photosindex; set if (index = photos.Length) Console.WriteLine(索引无效); return
45、; photosindex = value; ,带有 int 参数的 Photo 索引器,读/写索引器,定义和调用索引器,public Photo thisstring title get / 遍历数组中的所有照片 foreach (Photo p in photos) / 将照片中的标题与索引器参数进行比较 if (p.Title = title) return p; Console.WriteLine(未找到); / 使用 null 指示失败 return null; ,带有 string 参数的 Photo 索引器,只读索引器,定义和调用索引器,static void Main(stri
46、ng args) / 创建一个容量为 3 的相册 Album family = new Album(3); / 创建 3 张照片 Photo first = new Photo(Jeny ); Photo second = new Photo(Smith); Photo third = new Photo(“Lono); / 向相册加载照片 family0 = first; family1 = second; family2 = third; / 按索引检索 Photo objPhoto1 = family2; Console.WriteLine(objPhoto1.Title); / 按名称
47、检索 Photo objPhoto2 = family“Jeny; Console.WriteLine(objPhoto2.Title); ,中级特性,面向对象技术的三个核心概念: 封装:将数据和操作组合到一起,并决定哪些数据和操作对外是可见的。 继承:父类中的变量和行为,子类可以同样使用。本质是代码重用。 多态:由继承引出的一种机制,父类型的引用变量可以指向子类型的对象。,封装,封装把对象的所有组成部分组合在一起,有三个作用 隐藏类的实现细节:使用方法将类的数据隐藏起来。 迫使用户去使用一个界面去访问数据:定义程序如何引用对 象的数据,控制用户对类的修改和访问数据的程度。 使代码更好维护:类
48、的内部实现改变,对外接口可以不变。,继承,继承提供了创建新类的一种方法,继承对开发者来说就是代码共享。 通过继承创建的子类是作为另一个类的扩充或修正所定义的一个类。 子类从超类(父类)中继承所有方法和变量。 子类和超类之间是特化与范化的关系。,子类的声明,语法:子类声明:父类子类体 子类可以使用父类的protected和public可见的变量和方法,就像这些变量和方法是自己定义的一样。 C# 中,如果类声明时没有声明父类,那么缺省为Object 类的子类。C#中的所有类都是System.Object类的子类。 C#中,子类只能继承一个父类。,class Car int color; int d
49、oor; int speed; void PushBreak() public void AddOil() ,class TrashCar : Car class MyApp static void Main() TrashCar myCar = new TrashCar(); myCar.AddOil(); myCar.PushBreak(); ,派生类的建立需要注意: (1).派生类会继承基类除了构造函数和析构函数的所有成员。 (2).派生类调用构造函数时,会先调用基类的构造函数。默认调用没有参数的构造函数。 (3).用base关键字显式调用基类构造函数。,class Car public
50、 Car(int i) class TrashCar : Car public TrashCar(int i) ,class Car public Car(int i) class TrashCar : Car public TrashCar(int i):base(i) ,错误,错误,public Car() ,去掉 base(i),(3). 如果需要调用基类中的同名方法,应该使用”base.方法名”来调用。 class Car public Car() protected void f() Console.WriteLine(aaa); class TrashCar : Car publi
51、c TrashCar() void f() Console.WriteLine(bbb); public void f1() base.f(); f(); class MyApp static void Main() TrashCar myCar = new TrashCar(); myCar.f1(); ,例3-8 继承格式举例 public class parent /建立基类 public parent(string str) /基类带参数构造函数 Console.WriteLine(str); public void showposition() /基类方法 Console.Write
52、Line(基类的位置在(0,0)); public class child:parent /派生子类 public child():base(调用基类构造) /子类构造函数,调用基类构造函数 Console.WriteLine(I am child); public void showposition() base.showposition(); /调用基类方法 Console.WriteLine(派生类的位置在(10,10)); 在Main()方法中执行下面的代码: parent prt=new parent(I am a parent); child chd= new child(); p
53、rt.showposition(); chd.showposition ();,输出结果为: I am a parent 调用基类构造 I am child 基类的位置在(0,0) 基类的位置在(0,0) 派生类的位置在(10,10),例3-9:编写一个程序,计算球,圆锥,圆柱的表面积和体积 using System; namespace ConApp1 public class Circle protected double radius; public Circle(double r) radius=r; public double GetArea()return Math.PI*radi
54、us*radius; public class Sphere:Circle/球体类 public Sphere(double r):base(r) public double GetArea()return (4*base.GetArea(); public double GetVolumn() return (4*Math.PI*Math.Pow(radius,3)/3); public class Cylinder:Circle/圆柱类 private double height;/添加高度字段 public Cylinder(double r,double h):base(r)heigh
55、t=h; public double GetArea() return (2*base.GetArea()+2*Math.PI*radius*height); public double GetVolumn()return(Math.PI*radius*radius*height); ,public class Cone:Circle/圆锥类 private double height;/添加高度字段 public Cone(double r,double h):base(r)height=h; public double GetArea() return(Math.PI*radius*(radius+Math.Sqrt(height*height+radius*radius); public double GetVolumn() return (Math.PI*radius*radius*height/3); public class Tester publi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鼻饲术测试题及详细答案
- 2025~2026学年河南驻马店市西平县九年级第一学期期终学情调研英语试卷
- 2026年宁德福安市市场监管综合执法大队招聘工作人员2人备考题库附答案详解(夺分金卷)
- 2026护士进科考试题及答案
- 2026云南嘉华食品有限公司招聘备考题库及答案详解(易错题)
- 2026重庆市黔江中心医院招聘卫生人才7人备考题库含答案详解(考试直接用)
- 2026年甘肃张掖市肃南县引进高层次急需人才通过资格初审人员名单备考题库及答案详解(名校卷)
- 2026湖北历史高考试题及答案
- 2026贵州入团考试题目及答案
- 2026河北雄安新区雄工美好生活促进中心招聘2人备考题库附答案详解(研优卷)
- 如何成为一个合格的面试官课件
- 小学五年级家长会语文老师的课件
- AI在药物研发中的应用
- 新人教版七至九年级英语单词表
- 中医病证诊断疗效
- 关键施工技术、工艺与工程项目实施的重点、难点和解决方案
- 2023年环境卫生(正高)考试历年难点与易错点考核试题3答案解析
- 50套普通话测试题与答案
- GB/T 4325.23-2013钼化学分析方法第23部分:氧量和氮量的测定惰气熔融红外吸收法-热导法
- GB/T 2970-2016厚钢板超声检测方法
- 中小学生励志主题班会课件《告诉你孩子:几年的放纵-换来的是一生卑微和坎坷》
评论
0/150
提交评论