C#自学笔记.doc_第1页
C#自学笔记.doc_第2页
C#自学笔记.doc_第3页
C#自学笔记.doc_第4页
C#自学笔记.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#自学笔记第 32 页2020-02-02C#自学笔记21.C#语言简介21.1两大语法体系21.2C#语言简介22.C#的数据类型22.1值类型32.2引用类型52.3数据类型转换103.C#变量和常量103.1变量103.1常量114.c#条件语句124.1 IF语句124.2 Switch语句135.c#循环语句135.1 for语句145.2 do-while语句145.3 while语句145.4 foreach语句156.跳转语句156.1 break 语句156.2 continue语句166.3 goto语句167.C#类177.1面向对象编程技术177.2对象和类177.3类的定义177.4继承227.5重载237.6 重写(虚函数)247.7装箱和拆箱297.8构造函数297.9析构函数307.10捕获异常(try.catchfinally)307.11C#注释语句31C#自学笔记1.C#语言简介1.1两大语法体系在编程语言中,存在两大语法体系:一类是以C语言为基础的语法体系,如C、C+、Java、JavaScript和C#等;另一类是以Basic为基础的语法体系,如Basic、Visual Basic、Visual BasicNET和VBScript等。C语系最大的特点是灵活、强大、严谨,但比较复杂,入门比较难;Basic语系最大的特点就是通俗、易懂,适合初学者入门,但缺乏严谨的结构和强大的功能。1.2C#语言简介C#( C Sharp)是微软公司为NET专门开发的一种新语言,它本身没有提供类库,而是依靠NET框架提供的强大类库,同时一些类型安全检查,结构化异常处理等功能都交给CLR处理。在默认情况下C#代码只能在NET框架提供的环境中运行,不允许操作内存。2.C#的数据类型C#语言是一种强类型编程语言,这就要求用户在声明变量时一定要指定它的数据类型。编译器可以根据数据类型为其分配内存空间。C#的数据类型主要分为两大类:值类型和引用类型。(1) 值类型变量本身就包含它们的数据,即在变量的内存空间中存放变量的值。(2) 引用类型变量包含的是对存放变量值的内存空间的引用(指针或句柄),即变量的内存空间与变量值的内存空间是分开的,变量内存空间中保留的是对变量值内存空间的一个引用指针。为了方便处理常见的数据类型,C#预定义了15中数据类型,其中包括值类型中的13种常用类型和2中应用类型(object和string)2.1值类型值类型变量一般都存放在内存堆栈中。堆栈具有固定的大小,用于存储固定长度的数据。值类型可分为简单类型、枚举类型和结构类型3类.1. 简单类型数据类型大小取值范围sbyte8位有符号的整数-128127(-2727)short16位有符号的的整数-32,76832767(-215215)int32位有符号的整数long64位有符号的整数byte8位无符号的整数0255(028-1)ushort16位无符号的整数uint32位无符号的整数ulong64位无符号的整数float32位单精度浮点数double64位双精度浮点数decimal128位高精度十进制数表示法boolTrue或falsechar表示一个16位的(Unicode)字符2. 枚举类型用来声明一组命名的常数,使用enum关键子。(1)Enum Monthsjan,feb,mar,apr,may,jun,jul,aug,sept,oct,nov,dec上面语句声明了一个Months枚举类型的变量。Months变量共有12个成员,第一个jan的值为0,第二个枚举feb的值位1,以此类推。若Enum Monthsjan=2,feb,mar,apr,may,jun,jul,aug,sept,oct,nov,dec第一个枚举值位2,第二个枚举feb的值为3,以此类推。(3) 实例 using System;class testEnum daysSun,Mon,Tue,Wed,Thu,Fri,Sat;Static void Main()Console.WriteLine(days.Web);/输出为WebDays myday=day.Fri;Console.WriteLine(myday);Int myday2=(int)day.Fri;Console.WriteLine(myday2);/输出为5Console.Read();3. 结构类型结构类型可以把一系列相关的变量组在一起,这个实体就叫结构。用struct关键字进行声明。using System;class teststruct bookpblic string name;pblic string author;pblic string price;pblic string company;Static void main()book book1;/声明结构类型的book变量=”ASP.NET 2.0”;book1.author=”朱印宏”;book1.price=38;pany=”中国邮电”;console.WriteLine(“书名:0n作者:1n书价:2n出版社:3n”,,book1.author,book1.price,pany);2.2引用类型C#引用类型包括4种:类类型、数组类型、代理类型、接口类型。C#预定义了两个引用类型object类型和string类型。1. Object类型Object类型是一种根类型。面向对象的语言都提供一个跟类型,其他对象都是从根类型派生而来。在.NET中,所有的类均从object派生,所以object类中定义的方法和属性都可以继承到所有对象中,同时object类型变量可以赋给任何类型的值,例如:object obTemp;obTemp=136;obTemp=“abcd”;2. string类型(1) C#中连接字符串一般使用“+”(2) string类型是最常用的一种引用类型,string类型变量的值保存在堆上,而不是堆栈上。(3) “符号后面的所有字符串都被看作原来的含义,包括转义字符。3. 代理类型代理类型就是定义一个变量,该变量指代一个函数或一个方法。可以用delegate关键字定义一个代理变量。using System:delegate int a (); /定义一个代理变量class testpublic int b () /定义了一个方法Console.WriteLine(“你好!”);return;static void Main ()test p=new test (); /定义一个test类实例a c=new a (p.b); /用a代理变量定义一个代理变量并赋值c (); /执行该代理变量显示结果为:你好!4. 接口类型(1) 接口是一组包含函数方法的数据结构。通过接口类型变量可以实现调用对象组件的功能,接口类型变量可以包含属性。使用interface关键字可以定义接口变量。(2) 接口主要用于负责功能的定义,在项目中,通过接口来规范类、操作类、以及抽象类的概念。也就是说,可以通过接口对类的构成进行限制。接口不负责功能的实现,是负责功能的定义,而类负责功能的具体实现。(3) 通常使用大写字母“I”加英文单词方式定义接口的名称,这样可以方便地识别接口和类。名称通常使用PascalCase准侧。(PascalCase准侧:例:MyData)(4) 类和接口的区别a 接口可以使用任何可访问性来声明,但接口成员必须全部都具有公共可访问性。也就是说,定义接口成员时不能使用访问修饰符。b 不能向成员或接口自身附加安全性权限。不能使用static 、virtual、abstract和sealed来定义。c 接口不能定义构造函数。显然,接口只负责功能的定义,不能提供代码的实现,因此实现构造函数的定义也是没有意义的。d 接口中不允许定义字段,即接口中只能定义属性和方法(并没有代码的实现)(5) 接口的继承a 接口之间可以多重继承,用“:”,例:interface Ia:Ic,idb 一个类只能继承一个类,用“:”,例:class myclass:myclass1c 一个类可以继承多个接口,用“:”,列:class myclass:Ia,Icd 一个类可以同时继承类和接口,用“:”例:class myclass:class2,Ia,Ic(6) 实例using System;class class1 ()/定义接口类型变量Ic,改变两中保存对class2类中的add方法和sub方法的调用, 定义类的功能Interface Ic void add (double a,double b );void sub (double a,double b);/定义类Class2,并继承接口Ic,继承接口的类必须对接口进行代码实现class class2 :Ic public void add (double a, double b)Double result;Result=a+b;Console.WriteLine(“0+1=2”,a,b,result);public void sub (double a, double b)Double result;Result=a-b;Console.WriteLine(“0-1=2”,a,b,result);static void Main ()double a,b;Console.WriteLine(“请输入第一个数字”);a=double.Parse(Console.ReadLine(); /一次读入一行Console.WriteLine(“请输入第二个数字”);=double.Parse(Console.ReadLine();class2 class3=new class2 ();Ic d=class3 as Ic;/使用关键字as将class3定义为接口类型d.add( a,b);d.sub (a,b);/直接调用d接口实例的方法。6数组数组是包含一组类型相同的变量,这些变量有序的排列在一起,通过数组下标进行访问。下标索引从0开始,最大的下标索引等于数组元素个数减1,所有数组元素必须是同一数据类型。数据元素可以是任何类型,包括数组类型。数组可以分为一维数组和多维数组。(1)数组的定义l 数组的要素数组类型是通过指定数组的类型、数组的秩(维数)和数组每个维数的上限和下限来定义的。也就是说,一个数组的定义包含以下几个要素:a 元素类型b 数组的维数c 每个维数的上下限(即元素的个数,可省略)l 实例int myArray=new int4 1,2,3,4;string mystr=new string “Maths”,”Chinese”,”English”;int , myArray=new int2,23,4,5,6;/二维数组的定义和初始化(2)数组的访问可以用for循环语句,C#提供了foreach语句,可以用它访问数组中的每个元素而不需要确切地知道每个元素的索引,其示例如下:using System;namespace mynamespaceclass Programestatic void Main(string args)int myArray=new int 512,13,14,15,16; foreach (int number in myArray)Console.WriteLine(number);输出结果3数据类型转换C#中,数据类型的转换存在两种方式,一个是隐式转换,一个是显示转换。1. 隐式转换隐式转换就是系统默认的不需要声明就可以自动转换。在数值类型中,可以根据下面数据类型顺序,各类型的值依次向后自动进行转换:byte-short-int-long-fload-double2. 显示转换显示转换也称强制转换,强制转换就可能存在数据丢失问题。(1) 数值类型之间的转换Long m=2334;int n=(int)m;(2) 数值转换成字符串每个类都有一个Tostring()方法。所有数值的Tostring方法都能将数据转化为数值字符串。 String m=123.Tostring(); Int a=23; String b=a.Tostring ();(3) 字符串转换成数值Float f=float.Parse(“123.45”);(4)其他的数值类型也可以使用Parse()函数进行转换3.C#变量和常量3.1变量C#语言是一种比较安全的语言,每个变量都必须声明数据类型,编译器保证每个存储在变量中的值具有合适的类型。1. 声明变量int intsum;2. 变量命名规则c#语言对于大小写非常敏感,字母大小写不同会被认为不同的意思,因此在变量命名时应遵循如下规则:(1) 变量名必须以字母和下划线开头,且只能包含字母、数字和下划线。(2) 变量名中不能包含空格、标点符号、运算符等其他符号。(3) 变量名不能与C#的关键字发生冲突。如果在关键字前面加上“”符号,可以在变量中使用,如as就是一个合法的变量名。3. 变量的命名方法(1)Hungarian匈牙利命名法a.匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变量),再指针,再简单数据类型,再其他.b.匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。c.例子:string strDate; / /变量的前三个小写字母表示变量类型(2) camelCase骆驼命名法混合使用大小写字母来构成变量名称,一般是第一单词的首字母小写,第二个及其后面单词的首字母大写。如myDateTime(3) PascalCase帕斯卡命名法每个单词的首字母都大写,如:MyDateTime3.1常量1.C#中声明常量的语法如下:const datatype constantName2列子 a.一般常量的声明public const string www=”Word Wide Web”; b.一个句子中声明多个常量public const int a=2,b=4,c=6; c.使用常量表达式声明常量public const long a=2,b=1,c=9; public const long d=a+b+c;3. 声明常量时不允许使用static关键字4. c#条件语句4.1 IF语句(1)单行条件结构Aif ( conditon)Statements-1 elseStatements-2当条件condition为true ,就执行Statements-1,否则执行statements-2,else语句可省略。还可以用三元运算符来实现此结构,如:condition?true-value:false-value;(2)快条件结构快条件结构就是多个if结构的嵌套,其语法如下if(condition-1) Statements-1; else if (condition-2)Statemnets-2; else if (condition-3)Statemnets-3;elseStatements-44.2 Switch语句1.使用switch语句实现多分支结构,其语法如下switch (testexpression)case condition-1:statements-1;break;case condition-2:statements-2;break;case condition-3:statements-3;break;case condition-4:statements-4;break;default:statements-n;break;在上面的分支结构中,c#会先计算testexpression表达式的值,然后将表达式的值与每个case关键字后面的值进行比较,如果相等,就执行case语句下面的语句块,执行完毕,如果存在关键字break语句就退出分支结构,否则会继续执行下一个case语句,直到default语句结束。2.使用switch语句注意事项(1)case后面的表达式必须是一个常量表达式,不能使用变量。(2)在执行switch语句时,如果遇到break语句无条件的跳出多分支结构。 (4)每个case字句必须以break语句结束,来表明每个case子句的结束,否则编译时会报错。(5)switch语句区分大小写。5. c#循环语句在C#中提供了四种循环结构:for语句、do语句、while语句和foreach语句5.1 for语句(1)在c#中使用频率最高,它适合事先知道循环的次数,其语法如下,其中initializer表示循环控制变量并设置初值,从condition表示循环控制条件,iterator表示按规律改变循环控制变量initializer的值。for (initializer;condition;iterator)Statements;(2)for语句的执行方式a首先对循环控制变量initializer赋初值。b测试condition条件,如果条件为true,则执行statement语句块。c然后按iterator参数改变循环变量的值,重新测试condition条件,如果也为true,则再次执行statement语句块。 d以此类推,循环执行statement语句块。如果中间出现condition条件为false时,则退出for循环体。(3)for循环可嵌套5.2 do-while语句(1)语法结构do Statements;while (condition)(2)执行方式a首先执行嵌套语句块statement。b计算do语句的条件表达式condition,如果为true,则返回再次执行嵌套语句statement。否则跳出循环。5.3 while语句(1)语法结构while (condition)Statements;(2)执行方式a先计算while语句条件表达式condition。b如果条件为true,则执行statement语句,否则退出while循环c执行完嵌套语句块statements,再次验证while语句条件表达式condition,如果为true,则继续执行嵌套语句块statements,否则退出循环。以此类推。5.4 foreach语句 (1)语法结构Foreach(type identifier in express)Statements;其中type表示循环变量的类型,如int,string;identifier表示循环变量,express表达式对应一个数据集合。(2)执行方式每执行一次内嵌语句,循环变量就依次读取集合中一个元素并存储到变量中,再次循环时,读取的下一个元素值会替代前面一个元素的值存储到循环变量中。Foreach语句的循环次数仅根据集合元素的个数而定,读取全部元素后则循环结束。(3)注意事项如果集合元素的数据类型与循环变量的类型不一致,则必须显示转换元素类型到循环变量的类型。在这里循环变量是一个只读局部变量,不可改写。(2)例子using System;class testpublic static void Main()int arrNum=new int0,2,4,6,9;foreach(int i in arrNum)System.Console.WriteLine(i);6.跳转语句跳转语句可以在程序中无条件的跳转。C#提供了3个跳转语句:break语句,continue语句和goto语句。6.1 break 语句(1)使用break语句可以跳出switch、while、do、for或foreach语句结构中。其语法如下:break;(2)break语句必须包含在switch、while、do、for或foreach语句中,否则会发生错误。(3)break语句用于结束整个循环,即break语句只能跳出直接包含它的语句块,不能跳出多层嵌套,如果要实现多层嵌套跳转,则需要使用goto语句。6.2 continue语句Continue语句能够实现重新开始包含它的while、do、for语句块的执行,即continue语句用于跳出本次循环,重新开始下一次循环。其语法格式为:continue;6.3 goto语句(1)goto语句可以将程序执行流程直接跳转到标签指定的代码行。标签是由一个标识符和紧跟后面的冒号组成,goto语句的语法格式为:goto 标签标识符;(2)也可以在switch语句中跳转到指定的case子句,语法格式为:goto case 常数表达式;goto default;(3)列子using System; class test Static void Main()Console.WriteLine(“请输入a:”);Goto Next;Console.WriteLine(“请输入b:”);Next:Console.ReadLine():7.C#类7.1面向对象编程技术(1)类是面向对象编程技术的重要体现之一。(2)面向过程或函数的程序设计方法面向对象编程的英文全称为Object-Oriented Programming,简称OOP,在OOP出现以前,程序的编写普遍采用的过程式或函数式的程序设计方法,采用这类方法编写程序时,着重考虑的是解决问题的过程。这个时期,程序通常用流程图来描述。以C语言为例,通常开发人员用它来解决一些数据处理相关的问题。通常的C语言代码中都包含着大量的函数,这些函数被按照不同的顺序调用以解决某些特定的问题。例如:采用这种编程的方法来描述一个农民张三。张三是A村的农民,他早上七点出门务农,下午六点回家。实现这样一种描述并不困难,但如果要在程序中描述另一个人李四,他是B村的农民,早上九点出门务农,下午五点回家.,对于这种差别的处理需要大量的重复代码。因此传统的编程方式不利于程序的扩展,非常不灵活。(3)面向对象的编程技术OOPOOP着重与程序的初期设计,使得程序的扩展性比较高。对待上述问题,OOP将会抽象出一种农民类型,而张三和李四作为这种农民类型的子类型,这样即减少了代码的数量,在代码升级时也非常方便。7.2对象和类(1)类是一种抽象的数据类型,但是其抽象的程度可能不同。对象就是一个类的实例。例如:可以将农民设计为一个类,张三和李四各位改类(农民类)的一个对象。(2)C#是最新的完全面向对象的语言,类是C#中功能最为强大的数据类型。7.3类的定义7.3.1定义类c#使用class关键字定义类,在类创建后,程序员可以创建作为类的实例对象。具体语法如下:class className/定义成员在默认情况下,类被定义为内部的。7.3.2 类的访问修饰符访问修饰符用来定义类、类的成员或结构体的可访问性。(1)public(公共访问)使类可以在项目外被访问(可以在程序的任何位置对其进行访问),可以使用Public访问修饰符,这样被定义的类就称为公共类。公共访问是允许的最高访问级别。通常在属性前面采用public修饰。因为属性最重要的功能就是提供对字段的访问。(2)private(私有访问)私有成员只有在声明自身的类或结构体中才是可访问的,即只能被本类或本结构体访问。私有访问是允许的最低访问级别。通常在字段前面采用private修饰。(3)protected(保护访问):只能被本类及其子类访问(4)internal(内部访问):默认情况下类被定义为内部的,即只有当前项目中的代码才能访问。(5)protected internal(内部保护访问):只能被项目内所有类和这个类的子类访问。注:(1) 如果不是嵌套的类,命名空间或编译单元内的类只有public和internal两种修饰。(2)除了使用访问修饰符修饰外,还可以使用abstract和sealed。l abstractabstract用来修饰抽象类,抽象类的特点是不能被实例化,只能被继承,即表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。abstract不能和new同时用。l abstract类必须被继承,强制要求其继承者重写。声明时不提供其自身的实现,抽象类不能被实例化l 下面是抽象类用法的实例: abstract class A public abstract void F(); abstract class B: A public void G() class C: B public override void F() /方法F的实现 抽象类A内含一个抽象方法F(),它不能被实例化。类B继承自类A,其内包含了一个实例方法G(),但并没有实现抽象方法F(),所以仍然必须声明为抽象类。类C继承自类B,实现类抽象方法F(),于是可以进行对象实例化。l sealedsealed用来修饰类为密封类,密封类的特点是不能被继承,即阻止该类被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。7.3.3 c#中类可以包含的成员(1)常量:代表与类相关联的常量值(2)字段:在类中定义的变量,也称成员变量,表示存储位置。a类的访问修饰符对类的字段同样有效。另外,c#类中还有两个特殊的字段:只读字段和静态字段b readonly关键字:修饰字段为只读字段,不能被写操作。c static关键字:修饰字段为静态字段,属于类,为类的所有对象共用。而非静态字段属于某个具体的对象,只能被特定的对象专用。C#中严格规定非静态字段只能通过对象来访问,静态字段只能通过类来访问。(3)属性:提供对类字段进行安全访问a属性提供灵活的机制来读取、编写或计算私有字段的值。b属性包括get代码块和set代码块,get块用来访问字段值即返回字段的值,set用于设置字段值。同时,属性也可以不对字段进行任何操作。c在属性中可以不同时包括get和set代码块,但至少应包含一个,因为二者都不包含的属性是没有意义的。d属性本质上是方法,因此可以在属性中进行一些逻辑操作(4)方法:执行类中计算和其他操,表示对象中的函数。(5)事件:用来说明发生了什么事情(6)索引器:允许像使用数组那样访问类的数据(7)运算符:定义类的特有运算符(8)构造函数和析构函数:分别用来对类的实例进行初始化和销毁7.3.4 类成员命名规则(1)字段:camelCase(2)属性:PascalCase(3)方法:PascalCase 此处只是一种建议,读者可以根据习惯选择写法。7.3.5实例uising System;namespace mynamespaceclass Farmer/定义字段string name;/定义属性public string Namegetreturn name;set/*value是C#关键字,是进行属性操作时set的隐含参数,也就是在执行属性写操作时写在等号右面的值。*/name=value;int age; /定义字段public int Age /定义属性getreturn age;setif(value150|value0)thow new exception(“你输入的值不在有效范围内”)elseage=value;/定义构造函数class Framer(string m_Name)name=m_Name;public static void Main()Farmer zhang=new Farmer(“张三”);/类实例化并赋值,调用构造函数Console.WritLine();=”李四”;Console.WritLine();zhang.age=160;Console.WritLine(zhang.age);程序运行结果为:张三李四你输入的值不在有效范围内7.4继承(1) 任何面向对象的程序语言都支持两个重要特性:继承和多态。任何一个类都可以继承另一个类。被继承的类被称为基类或父类,继承其他类的类叫做派生类或子类。继承的方法是在类名后面加上一个冒号,然后在其后添加父类名,其语法如下: class className:baseclassName/定义成员(2)C#中规定一个类只能继承一个类,用“:”,例:class myclass:myclass17.5重载重载是c#方法的一个重要特性,它表示在一个类中定义多个同名方法(返回值类型和函数名相同),这些方法通过不同的参数类型或者参数个数进行区分。实例: uisng System; class myclasspublic static bool isEqual(int x,int y)if(x= =y)return true;elsereturn false;public static bool isEqual(string x,string y)if(x= =y)return true;elsereturn false;public static void Main()bool a=myclass.isEqual(34,39);bool b=myclass.isEqual(“bbb”,”bbbbb”);console.WriteLine(a);console.WriteLine(b);7.6 重写(虚函数)(1)方法重写是实现多态机制的一种方式。要使基类的方法可以被派生类重写,需要在方法的声明中加上关键字virtual,这种方法称为虚拟方法(函数)。同时,在派生类中,重写方法中需要加上关键字overide。(2)例子:using System;class baseclasspublic virtual int add(int x,int y)return x+y; class subclass:baseclass /继承了baseclass类public overide int add(int x,int y)return x*y;class myclass:subclasspublic overide int add (int x,int y)return x*x+y*y;class testpublic static void Main()myclass b=new myclass();int c=b.add(4,6);console.WriteLine(c);运行结果为:52 ,即执行了return 4*4+6*6(3)interface、abstract和virtual的区别l interface用来声明接口A.只提供一些方法规约,不提供方法主体如 public interface IPerson void getName();/不包含方法主体 2.方法不能用public abstract等修饰,无字段变量,无构造函数。3.方法可包含参数 如 public interface IPerson void getAge(string s); 一个例子(例1):public interface IPerson IPerson(); /错误 string name; /错误 public void getIDcard();/错误 void getName(); /right void getAge(string s); /right B.实现interface的类1.与继承类的格式一致,如 public class Chinese:IPerson2.必须实现interface中的各个方法例2,继承例1 public class Chinese:IPerson public Chinese() /添加构造 public void getName(). /实现getName() public void getAge(string s). /实现getAge() l abstract声明抽象类、抽象方法1.抽象方法所在类必须为抽象类2.抽象类不能直接实例化,必须由其派生类实现。3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似如public abstract class Book public Book()/构造函数 public abstract void getPrice(); /抽象方法,不含主体 public virtual void getName() /虚方法,可覆盖 Console.WriteLine(this is a test:virtual getName(); public virtual void getContent() /虚方法,可覆盖 Console.WriteLine(this is a test:virtual getContent();public void getDate() /一般方法,若在派生类中重写,须使用new关键字 Console.WriteLine(this is a test: void getDate(); 抽象函数的具体实现 public class JavaBook:Book public override void getPrice() /实现抽象方法,必须实现 Console.WriteLine(this is a test:JavaBook override abstract getPrice(); public override void getName() /覆盖原方法,不是必须的 Console.WriteLine(this is a test:JavaBook override virtual getName(); 测试如下:public class testpublic test()JavaBook jbook=new JavaBook();jbook.getPrice(); /将调用JavaBook中getPrice() jbook.getName(); /将调用JavaBook中getName() jbook.getContent(); /将调用Book中getContent()jbook.getDate(); /将调用Book中getDate()public static void Main()test t=new test();l virtual标记方法为虚方法1.可在派生类中以override覆盖此方法2.不覆盖也可由对象调用3.无此标记的方法(也无其他标记),重写时需用new隐藏

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论