版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.,1,C# 课件,第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 ACCP 4.0补充,.,2,.NET 平台以及Visual Studio.NET IDE简介,第一章,返回,.,3,目标,讨论计算、Internet 和应用程序开发的转变 了解对 .NET 的需求 解释 CLR 和 IL 的角色 Visual Studio.NET IDE简介,.,4,集中式计算,.,5,客户端/服务器计算,数据大的话网络就不好了,.,6,分布式计算2-1,.,7,分布式计算 2-2,.,8,计算方案的转变,.,9,当前的 Internet,.,10,目前存在的难题,.,11,
2、Internet 的转变,站点、服务和设备彼此协作,共同提供丰富的用户体验。,.,12,应用程序开发的演变,.,13,.NET - 演变的结果2-1,.,14,.NET -演变的结果 2-2,Internet 的转变,计算的转变,应用程序开发的转变,融合计算 和通讯,形成组合体, 而不是孤岛!,分布式计算 本地进行,软件成为 服务,应用程序可以由 任何人在任何地方 使用,.NET,.,15,.,16,.NET - 将 DC(个人计算) 向前推进了一步2-1,.,17,.NET - 将 DC 向前推进了一步2-2,.,18,.NET 所支持的语言,.,19,语言特定的编译器和运行库,.,20,代
3、码 被执行,IL + 元数据,C L R,IL 和 CLR 的使用,.,21,执行 .NET 程序,.,22,Microsoft 中间语言,.,23,公共语言运行库,.,24,VS.NET IDE帮助系统演示,.,25,VS.NET IDE设计器演示,.,26,VS.NET IDE窗口管理演示,.,27,总结,.NET 是以 Internet 为中心的一种全新的平台 通过 .NET,可以将用户数据存放在网络上,并且随时随地通过与 .NET 兼容的任何设备访问这些数据 NET 独一无二的特征是可以提供多语言支持 以 .NET 语言编写的源代码将被编译两次,第一次由语言特定的编译器从源代码编译为
4、IL,第二次从 IL 编译为机器码,.,28,Microsoft.NET 平台组件,第二章,返回,.,29,回顾,.NET 是以 Internet 为中心的一种全新平台 通过 .NET,可以将用户数据存放到网络上,随时随地通过与 .NET 兼容的任何设备访问该数据 .NET 独一无二的特征是提供多语言支持 以 .NET 语言编写的源代码被编译两次, 一次由语言特定的编译器从源代码编译 成 IL,第二次从 IL 编译成机器码,.,30,目标,描述 Microsoft.NET 的核心组件 讨论 .NET 框架并列出其组件 谈论.NET优点,.,31,Microsoft.NET 的组件,.,32,M
5、icrosoft.Net 平台的功能,Internet 协议,X M L,Microsoft.NET,构建在 XML 和 Internet 协议的基础之上,用于开发新 一代软件的一套工具和服务集,旨在使对 Internet 上的任何资源组进行集成/编排成为可能,可以更快更容易地设计、实现 和部署协作式 Web 解决方案,.,33,XML,Internet 协议,X M L,Microsoft.NET,将实际数据与表现形式分开,构建新一代 Internet 的关键;使得能够对信息进行整理、编程和编辑,提供了一种将数据发布到多种设备的方法,使站点能够进行协作并提供 能够彼此交互的 Web 类型丰富
6、、性能高不用类型转换、穿透防火墙 服务组合体,.,34,SOAP 的功能,Internet 协议,X M L,Microsoft.NET,Microsoft.NET 构建在 HTTP 和 SOAP (简单对象访问协议)等现有协议上,SOAP 是基于 XML/HTTP 的协议,SOAP 允许以独立于平台的方式访问服务、 对象和服务器,SOAP 用于在分散的分布式 环境中交换信息,.,35,Microsoft.NET 平台,.,36,.NET 框架,.NET Enterprise Server,.NET 生成 块服务,选择 Windows 2000 系列,.,37,Microsoft.NET 框架
7、的组件,.,38,通过服务器系列可以快速生成和管理一个集成的、支持 Web 的企业系统 可伸缩性设计 可以与最新的 Internet 和数据标准实现互操作,安装 SQL Server 2000,Internet Security class Test static void Main() int array1 = new int5; Console.WriteLine(10 * array12); ,本示例 的输出 结果是 0,.,65,默认值,常用数据类型的默认值:,.,66,C# 中的输入/输出3-1,使用 System 命名空间中的 Console 类的方法 最常用的方法 Console
8、.ReadLine( ) Console.WriteLine( ),.,67,C# 中的输入/输出 3-2,using System; class TestDefaultValues static void Main() int number, result; number=5; result=100 * number; Console.WriteLine(“当 100 与数字 0 相乘时,结果为 1 , number, result); ,突出显示的代码行起着占位符的作用,即指定变量结果值的显示位置。,index,alignment:formatString) 可选整数,指示包含格式化值的区
9、域的最小宽度。如果格式化值的长度小于对齐,则用空格填充该区域。如果对齐为负,则格式化的值将在该区域中左对齐;如果为正,则格式化的值将右对齐。如果没有指定对齐,则该区域的长度为格式化值的长度。如果指定对齐,则需用逗号分隔。 G常规,E 或 F 中较短的 F浮点数,常规表示法 E用 E 表示法表示的浮点数(其中,E 代表 10 的次幂) N带有分隔符的浮点数(在美国为逗号) C货币,带有货币符号和分隔符(在美国为逗号) D十进制数,仅用于整型 X十六进制数,仅用于整型,.,68,C# 中的输入/输出 3-3,示例接受了一行的用户输入,并将其回显为输出,.,69,if 结构2-1,用于执行条件分支
10、语法 表达式需要始终为 Boolean 类型的表达式,.,70,If结构2-2,上面的代码段将显示错误消息 错误 CS0029:无法将类型“string”隐式转换为类型“bool”,.,71,switch 语句2-1,语法 -,每个case分支必须有一个break语句,.,72,switch 语句2-2,Switch结构可以充当多个if语句,.,73,循环结构,当特定条件为 true 时执行一组特定的指令,或将特定指令组执行一定次数 循环结构的类型 - while 循环 do 循环 for 循环 foreach 循环,.,74,while 循环,while 循环执行一组语句,直至指定条件为 f
11、alse break 语句 - 随时跳出循环 continue 语句 - 跳过当前循环,并开始 下一循环,.,75,do 循环,语法 -,在条件检查之前,循环体中的语句组至少执行一次,.,76,for 循环,语法 -,int sum=1; for(count=0;count10;count+) sum+; ,for语句循环10次,sum的的最终结果是10。,.,77,foreach 循环2-1,foreach 循环用于通过集合或数组来循环 语法 -,.,78,foreach 循环 2-2,using System; public class ForEachLoop static void Ma
12、in(String args) int index; String array1=new String3; for(index=0;index3;index+) array1index=argsindex; foreach(String strName in array1) Console.WriteLine(strName); ,.,79,C# 中的构造函数,C# 中的构造函数与类同名, class MyConstructorEx public MyConstructorEx() /MyConstructorEx 构造函数 ,.,80,C# 中的析构函数,C# 中的析构函数与类也同名, cl
13、ass MyConstructorEx public MyConstructorEx() /MyConstructorEx 构造函数 public MyConstructorEx() /MyConstructorEx 析构函数 ,.,81,C# 的基本类型2-1,C# 的数据类型分为两种基本类型 值类型 int、char 和结构 引用类型 类、接口、数组和字符串,.,82,C# 的基本类型2-2,值类型 仅在内存中保存值 存储与堆栈中 引用类型 将对象的地址存储与堆中 null表示没有应用任何对象,.,83,值类型,variableVal是值类型 输出结果为100,而不 是200,.,84,引
14、用类型,using System; class DataTypeTest public int variableVal; class DataTypeTestRef static void Main() DataTypeTest dataTest = new DataTypeTest(); dataTest.variableVal = 100; funcDataTypeTest(dataTest); Console.WriteLine(dataTest.variableVal); static void funcDataTypeTest(DataTypeTest dataTest) int t
15、empVar=10; dataTest.variableVal = tempVar*20; ,.,85,值类型和引用类型,.,86,装箱和取消装箱,装箱是从值类型到引用类型的转换 取消装箱是从引用类型到值类型的转换 示例,.,87,C# 中的数据类型处理,C# 提供了一种“统一类型系统” C# 中所有数据类型都是从一个类即 object 类派生而来的,.,88,静态成员,成员不与任何特定的对象或类关联 仅可以有一个实例, static int staticMem; static int instanceCount() /instanceCount 实现 ,.,89,数组,一组具有类似数据类型的
16、值 属于引用类型,因此存储于堆中 C# 中的数组声明语法如下 DataTypenumber of elements ArrayName;,.,90,结构,结构属于值类型 可以有方法 可以拥有构造函数 不能实现继承, struct structEx public int structDataMember; public void structEx() /构造函数实现 public void structMethod1() /structMethod1 实现 ,.,91,枚举类型2-1,public class Holiday public enum WeekDays Monday, Tuesda
17、y, Wednesday, Thursday, Friday public void GetWeekDays(String EmpName, WeekDays DayOff) /处理 WeekDays static void Main() Holiday myHoliday = new Holiday(); myHoliday.GetWeekDays(Richie, Holiday.WeekDays.Wednesday); ,程序中声明了仅接受5个值的枚举类型WeekDays,.,92,枚举类型2-2,C# 中的枚举数都有与值相关联的数字 默认情况下,枚举数的第一个元素被指定为 0 值,后续的
18、各个枚举数元素的值依次递增 默认值可以在初始化阶段中重写,.,93,编译和运行,步骤 1 - 在记事本中输入代码 步骤 2 - 使用 .cs 扩展名保存文件 步骤 3 - 切换至 DOS 提示符,再输入以下命令 要运行 C# 文件,可以键入不带扩展名 的文件名,.,94,总结,在 C# 中,数据类型分为两种基本类型,即值类型和引用类型。 装箱是指从值类型到引用类型的转换,而取消装箱是指从引用类型到值类型的转换。 C# 中的结构内部可以定义方法,也可以拥有构造函数。 枚举类型是声明一组命名常数的独特类型。,.,95,在 C# 中实现 OOP 概念,第四章,返回,.,96,作业点评,变量没初始化
19、结构的构造函数没有指定参数 String string 引用(字符串)String是固定不变的,在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值, 如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源 Csc 静态 其它例子,.,97,回顾,第三章C#基础 C#变量的声明方式如下: AccessModifier DataType VariableName; 在C#中,数据类型分为两种基本类型,即值类型和引用类型。 装箱是指从值类型到引用类型的转换,而取消装箱是指从引用类型到值类型的转换。 C#的结构内部可以定义方法,也可以拥有构造函数。,.,98,目标,在C
20、#中使用构造函数 在C#中使用析构函数 解释垃圾回收器的工作原理 讨论方法重载 讨论操作符重载 在C#中使用继承 讨论C#中的重写,.,99,C# 中的构造函数3-1,是类中的特殊类型的方法 是每次创建对象时要调用的函数 通常用于初始化 与类同名 不返回值,.,100,构造函数3-2,using System; public class DaysInYear private int days; public DaysInYear() days = 365; static void Main(String args) DaysInYear newDaysInYear=new DaysInYear
21、(); Console.WriteLine(newDaysInYear.days); ,无构造函数输出 的结果是0,有构造函数输出 结果是365,.,101,带参数的构造函数3-3, public class DaysInYear private int days; public DaysInYear() days = 365; public DaysInYear(int day) days = day; public DaysInYear(String dayOne) days =Convert.ToInt32(dayOne); public void setDay(int newDays)
22、 days = newDays; ,传递不同个数的参数 传递个数相同但类型不同的参数,.,102,C# 中的析构函数,由C#中的垃圾回收器调用 垃圾回收器通过销毁不再需要或不再被引用的对象来释放内存 语法, DaysInYear() / 析构函数实现 ,不能对结构使用析构函数。只能对类使用析构函数。 一个类只能有一个析构函数。 无法继承或重载析构函数。 无法调用析构函数。它们是被自动调用的。 析构函数既没有修饰符,也没有参数。,.,103,垃圾回收器3-1,垃圾回收器的工作原理 如果为定义析构函数的对象分配了内存,运行库将把该对象添加到需要销毁的对象的列表中。 垃圾回收器定期检查有没有不再被引
23、用的对象 如果找到了其名称没有列在销毁器列表中的对象,就立即清除该对象。 完成垃圾回收后,将调用销毁器线程,该线程调用有标记为“准备销毁”的对象的销毁方法 (析构函数)。,.,104,垃圾回收器3-2,对象销毁过程发生后,就将该对象从需要销毁的对象列表中删除。 因为该对象没有被引用,也没有列在销毁器列表中,所以下次进行垃圾回收时就会将它清除。,.,105,垃圾回收器3-3,有析构函数的对象占用的资源较多,因为即使不再需要它们,它们仍会在内存中驻留较长时间。 销毁过程作为独立的线程执行,该线程 会占用大量资源。,GC.Collect ()强制进行垃圾回收。,.,106,方法重载,重载方法有两种方
24、式 指定不同个数的参数 指定不同类型的参数,.,107,不同参数个数的方法重载,using System; public class Area private int areaVal; public void AreaCal(int radius) areaVal = (22/7)* radius*radius; public void AreaCal(int length, int breadth) areaVal = length*breadth; public void AreaCal(int length, int breadth, int height) areaVal = leng
25、th*breadth*height; ,参数的类型相同 参数个数不同,.,108,不同参数类型的方法重载,. public void AreaCal(int radius) areaVal = (22/7)* radius*radius; public void AreaCal(string shapeName) Console.WriteLine(0 的面积没有计算,shapeName); .,方法中参数个数相等,参数类型不同,.,109,操作符重载3-1,重载操作符意味着使该操作符具有不同的行为 使用操作符可以使方程式简单易懂, / 第 1 行 int result = Decimal.A
26、dd(54, 200); / 第 2 行 int result2 = 54 + 200; ,上述两行执行同样的操作,但操作符更简便易懂,.,110,操作符重载3-2,以下是可以重载的操作符列表,public static result-type operator unary-operator ( op-type operand ) public static result-type operator binary-operator ( op-type operand, op-type2 operand2 ),.,111,操作符重载3-3,using System; public struct
27、Distance public Distance(int lon, int mag) this.longitude = lon; this.latitude = mag; int longitude, latitude; public static Distance operator - (Distance first, Distance second) return new Distance(first.longitude - second.longitude, first.latitude - second.latitude); / 主函数 ,public static void Main
28、() Distance start = new Distance(); Distance newDistance = new Distance(); Distance finish = new Distance(); start.longitude = 12; start.latitude = 10; finish.longitude = 2; finish.latitude = 1; newDistance = start - finish; Console.WriteLine(终点的位置在起点以东 0 度,以北 1 度。, newDistance.longitude,newDistance
29、.latitude); ,.,112,C# 中的继承2-1,将新类作为另一个类的后代来声明和使用 避免重复编写代码 提供代码重用的巨大好处,.,113,C# 中的继承2-2,有两种继承类型 单一继承 多重继承,C#只支持单一继承,不支持多重继承,.,114,单一继承,using System; class CharacterVal public int setCharVal(char ch) char charVal=ch; Console.WriteLine(输入的字符是:0,charVal); return(0); class StringVal : CharacterVal public
30、 string strVal; public int setStrVal(string str) strVal=str; Console.WriteLine(输入的字符串是:0,strVal); return(0); ,class Inheritance static void Main() StringVal object1 = new StringVal(); Object1.setCharVal(j); Object1.setStrVal(enjoy); ,类StringVal继承CharacterVal 因此可以直接引用方法 setCharVal,.,115,密封类,如果不需要类被继承
31、则应当密封该类, sealed class classOne / 类的实现 ,通过指定sealed关键字,可以密封任何类,.,116,方法重写2-1,重写基类中现有方法的步骤: 在继承类中声明同名的新方法 在该方法名前附加new关键字,.,117,方法重写2-2,using System; class IntAddition public void add() int firstNum=1; int secondNum=2; Console.WriteLine(两数之和是:0, firstNum+secondNum); class StringAddition : IntAddition ne
32、w public void add() string firstStr=a; string secondStr=b; Console.WriteLine(两字符串之和是:0, firstStr+secondStr); ,class MethodOverride public static void Main() StringAddition objStringAddition = new StringAddition(); objStringAddition.add(); ,在StringAddition类中基类中add方法被重载,.,118,总结2-1,带参数的构造函数是接受参数的构造函数
33、在 C# 中,析构函数由垃圾回收器调用。 在 C#中,有两种方式来重载方法 指定不同个数的参数 指定不同类型的参数 C#允许重载操作符,.,119,总结2-2,重载操作符意味着使操作符(例如,加法操作符 +)在应用于结构或类的某些对象时具有不同的行为 C# 不支持多重继承 要重写基类的现有方法,需要在继承类中声明一个同名的新方法,并在方法名称前附加 new 关键字,.,120,C# 中的高级 OOP 概念,第五章,返回,.,121,回顾,第四章 - 实现C中的高级OOP概念 带参数的构造函数是指接受参数的构造函数。 在 C#中,析构函数由垃圾回收器调用。 在C#中允许方法重载 在C#中允许操作
34、符重载 C#不支持多重继续 要重写基类的现有方法,需要在继承类中声明一个同名的新方法,并在方法名称前附加 new关键字,.,122,目标,讨论多态性 使用虚函数 讨论抽象基类 讨论接口的概念 使用接口,.,123,C# 中的多态性6-1,多态性和虚函数关系非常密切 多态性允许在运行时实现派生类的方法 需要从基类的对象调用派生类方法时,可以使用虚函数,public class ShapeObj public virtual void area() System.Console.WriteLine(这是一个虚 Area 方法); ,.,124,C# 中的多态性6-2,.,125,C# 中的多态性6
35、-3,public class Circle : ShapeObj public override void area() System.Console.WriteLine(这是 Circle 的 Area() 方法); public class Rectangle : ShapeObj public override void area() System.Console.WriteLine(这是 Rectangle 的 Area() 方法); public class Square : ShapeObj public override void area() System.Console.W
36、riteLine(这是 Square 的 Area() 方法); ,定义了三个类(Rectangle、Circle 和 Square)。这些类是从 ShapeObj 类派生的, 并且重写了ShapeObj 类的 area() 方法。override 关键字用于重写基类函数 area()。,.,126,C# 中的多态性6-4,public class PolymorphismExp public static void main() ShapeObj objArray = new ShapeObj4; objArray0 = new ShapeObj(); objArray1 = new Rec
37、tangle(); objArray2 = new Circle(); objArray3 = new Square(); foreach (ShapeObj iterateArray in objArray) iterateArray.area(); ,每个派生自 ShapeObj 的类的 area()方法都被 调用,.,127,C# 中的多态性6-5,class SecondExp public int firstMethod() return(secondMethod()*thirdMethod(); public virtual int secondMethod() return(10
38、); public int thirdMethod() return(20); class DerivedClass : SecondExp public override int secondMethod() return(30); class Test Public static void main() DerivedClass objDerived = new DerivedClass(); System.Console.WriteLine(objDerived.firstMethod(); ,在DerivedClass 中重写基类中 的虚函数 secondMethod(),.,128,
39、C# 中的多态性6-6,多态性是智能重写 多态性 - 在运行时决定调用哪个方法 多态性需要虚函数,而虚函数则需要进行方法重写,.,129,抽象基类2-1,抽象基类是可以被继承的类 不能创建抽象类的对象 C#允许在类定义中添加abstract修饰符来创建抽象基类。 可以有实现的方法.,.,130,抽象基类2-2,using System; abstract class BaseClass public abstract void abstractFunc(); public void nonAbstractFunc() Console.WriteLine(这是 nonAbractFunc() 方
40、法!); class DerivedClass : BaseClass public override void abstractFunc() Console.WriteLine(这是 abstractFunc() 方法!); class Test static void main() DerivedClass objDerived = new DerivedClass(); BaseClass objBase = objDerived; objBase.abstractFunc(); objDerived.nonAbstractFunc(); ,在派生类DerivedClass 中重写抽象基
41、类的抽象 方法abstractFunc(),.,131,接口4-1,接口相当于纯抽象基类 它只能包含抽象方法,而不能包含任何方法实现 实现特定接口的类必须实现该接口列出的成员 只能有方法 属性 索引的声明 只能是public internal 方法声明不能有访问修饰符.,public interface IFile int delFile(); void disFile(); ,.,132,接口4-2,public class MyFile : IFile public int delFile() System.Console.WriteLine(DelFile 实现!); return 0;
42、 public void disFile() System.Console.WriteLine(DisFile 实现!); class Test static void main() MyFile objMyFile = new MyFile(); objMyFile.disFile(); int retValue = objMyFile.delFile(); ,类MyFile继承了 接口IFile并实现 了接口中定义的方 法delFile()和 disFile(),.,133,接口4-3,定义一个类:,public class BaseforInterface public void ope
43、n() System.Console.WriteLine(这是 BaseforInterface 的 open 方法); ,.,134,接口4-4,public class MyFile : BaseforInterface, IFile public int delFile() System.Console.WriteLine(DelFile 实现!); return 0; public void disFile() System.Console.WriteLine(DisFile 实现!); class Test static void main() MyFile objMyFile =
44、new MyFile(); objMyFile.disFile(); int retValue = objMyFile.delFile(); objMyFile.open(); ,定义一个继承类 BaseforInterface 和接口Ifile的新类 MyFile,示例输出如下图:,.,135,多接口2-1,C# 允许多接口实现 定义一个接口,仅包含一个方法,public interface IFileTwo void applySecondInterface(); ,.,136,多接口2-2,public class MyFile : BaseforInterface, IFile, IF
45、ileTwo public int delFile() System.Console.WriteLine(DelFile 实现!); return 0; public void disFile() System.Console.WriteLine(DisFile 实现!); public void applySecondInterface() System.Console.WriteLine(ApplySecondInterface 实现!); class Test static void main() MyFile objMyFile = new MyFile(); objMyFile.di
46、sFile(); int retValue = objMyFile.delFile(); objMyFile.open(); objMyFile.applySecondInterface(); ,本示例实现多接口 继承,与前面代码合 并后输出的结果如下:,.,137,显式接口,当两个接口中具有同名的方法时,可以使用显式接口实现,public interface IFile int delFile(); void disFile(); public interface IFileTwo void applySecondInterface(); void disFile(); public cla
47、ss MyFile : BaseforInterface, IFile, IFileTwo . void IFile.disFile() System.Console.WriteLine(DisFile 的 IFile 实现); void IFileTwo.disFile() System.Console.WriteLine(DisFile 的 IFileTwo 实现); . ,static void Main(string args) MyFile objM = new MyFile(); IFile Fobj = objM; /IPict 引用 Fobj.DisFile(); IFileT
48、wo FTobj = objM; /IPictManip 引用 FTobj.DisFile(); ,.,138,接口继承,可以通过将多个接口组合到一起来创建新的接口,interface IAllFile : IFile, IFileTwo /如果需要,除了 IFile 和 IFileTwo 操作之外, /还可以添加更多操作 ,.,139,总结2-1,需要从基类的对象调用派生类方法时,可以使用虚函数 重写和多态性之间的区别在于,在多态性中,要调用哪个方法的决定是在运行时做出的。 抽象基类是至少包含一个抽象成员(没有实现的方法)的类。不能创建抽象基类的新实例。没有实现的方法称为操作。,.,140,
49、总结2-2,接口是纯抽象基类。它只能包含抽象方法,而不能包含任何方法实现。 一个类可以实现多个接口;事实上,类能够从另一个类继承,也能够实现接口。,.,141,命名空间,第六章,返回,.,142,回顾,第五章 C# 中的高级 OOP 概念 当需要从基类的对象中调用派生的类方法时,虚拟函数十分有用。 重写和多态之间的区别是:在多态中,调用哪种方法的决定是在运行时做出的。 抽象基类是至少包含一个抽象成员(没有实现的方法)的类。不能创建抽象基类的新实例。没有实现的方法称为“操作”。 接口是纯抽象基类。它只能包含抽象方法,而不包含方法实现。一个类可以实现多个接口。,.,143,目标,解释命名空间 创建
50、自定义的命名空间 讨论命名空间命名的类型 使用命名空间指令 为命名空间创建别名 了解 .NET 基类库,.,144,命名空间,用于避免命名冲突 专用于组织代码 当代码要在其他某个应用程序中重用时,可以降低复杂性,.,145,声明命名空间2-1,与类的声明过程相似 语法 namespace NameSpaceName /此处列出该命名空间的全部类! ,.,146,声明命名空间2-2,class SamsungTelevision . class SamsungWalkMan . class SonyTelevision . class SonyWalkMan . ,namespace Samsu
51、ng class Television . class WalkMan . namespace Sony class Television . class Walkman . ,使用命名空间解决命名冲突更简洁、更有条理、结构更清晰,.,147,嵌套命名空间,在一个命名空间内声明另一个命名空间,. namespace Sony namespace Television class T14inches . class T21inches . .,. namespace Sony.Television class T14inches . class T21inches . .,第二种命名空间的方法在
52、C#中可用,在C+中是不可用的,.,148,访问修饰符和命名空间,命名空间是隐式公共的 命名空间不能为受保护的、私有的或内部的,. public namespace Sony /错误 . private namespace Samsung /错误 . .,在声明命名空间时前面不应加任何访问修饰符,.,149,限定命名,要在类所属的命名空间内使用该类,只需要指定该类的名称 要在类所属的命名空间之外使用该类,必须使用该类的完全限定名来引用它 Namespace.class name,.,150,非限定命名,namespace Sony class Television . class WalkMa
53、n . Television MyEntertainment = new Television(); . ,在类所属的命名空间内使用该类时,只需指定类名,这 称为“非限定名称”,.,151,限定命名 - 示例,using Sony; using Samsung; using System; namespace Sony namespace Television class T14inches public T14inches() Console.WriteLine (一台 14 英寸的电视机); class T21inches public T21inches() Console.WriteL
54、ine (一台 21 英寸的电视机); ,namespace Samsung class Television Sony.Television.T14inches myEntertainment = new Sony.Television.T14inches(); class Test static void Main() Samsung.Television myEntertainment = new Samsung.Television(); ,限定命名是在类名称前加上点 操作符和名称空间,.,152,using 命名空间指令,使用限定命名会使代码变长且容易混淆 使用 using 命名空间
55、指令可以使长且容易混淆的名称变得简短而且有意义,. Sony.Television.T14inches Television = new Sony.Television.T14inches(); .,using Sony.Television; T14inches Television = new T14inches(); T21inches Television2 = new T21inches();,.,153,有效和无效的命名空间声明,.,154,二义性名称2-1,using Sony; using Samsung; class Test static void Main() Television MyEntertainmen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瓦屋面工创新方法模拟考核试卷含答案
- 调理肉制品加工工岗前基础培训考核试卷含答案
- 皮肤管理师安全生产基础知识竞赛考核试卷含答案
- 工艺蜡染工安全技能测试模拟考核试卷含答案
- 水产养殖潜水工安全实操强化考核试卷含答案
- 印染烧毛工变革管理强化考核试卷含答案
- 压力机(生产线)操作工岗中业务能力考核试卷含答案
- 船舶电焊工变更管理评优考核试卷含答案
- 铝箔腐蚀氧化工班组安全能力考核试卷含答案
- 油船清洗工安全知识强化考核试卷含答案
- 棚顶抬升施工方案及流程
- 《神曲》课件教学课件
- 北理 光电成像原理与技术4-辐射源与典型景物辐射教学课件
- 人教版(2024)八年级上册数学全册教案
- 药品验收员培训试卷及答案
- DB41T 2689-2024水利工程施工图设计文件编制规范
- 乳制品gmp培训课件
- 智慧水电厂一体化平台建设技术导则
- 数说成长 共育花开-二年级数学家长会【课件】
- 幼儿园如何家长会培训
- 20起典型火灾事故案例合集-2024年消防月专题培训
评论
0/150
提交评论