面向对象编程基础ppt课件.ppt

上传人:小飞机 文档编号:1371586 上传时间:2022-11-15 格式:PPT 页数:75 大小:725KB
返回 下载 相关 举报
面向对象编程基础ppt课件.ppt_第1页
第1页 / 共75页
面向对象编程基础ppt课件.ppt_第2页
第2页 / 共75页
面向对象编程基础ppt课件.ppt_第3页
第3页 / 共75页
面向对象编程基础ppt课件.ppt_第4页
第4页 / 共75页
面向对象编程基础ppt课件.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《面向对象编程基础ppt课件.ppt》由会员分享,可在线阅读,更多相关《面向对象编程基础ppt课件.ppt(75页珍藏版)》请在三一办公上搜索。

1、1,第3章 面向对象编程基础,1. 理解基本概念2. 理解类3. 使用构造函数4. 学习方法5. 学习属性,掌握,2,姓名、性别、年龄等:属性学习课程、参加社会活动:方法,3.1 面向对象编程概念,1. 对象具有属性和操作(方法)的实体。 属性:对象所处的状态 方法:用于改变对象状态以达到特定的功能 对象有一个唯一的标识名 2. 类在对象之上的抽象,一种抽象的数据类型 3. 类是对象的模板,对象是类的具体化或类的实例示例:学生类各位同学对象,3,对象 与 类,属性,型号,价格,里程,行为,起动,停车,行驶,属性,车轮数量,档的数量,行为,加速,换档,刹车,属性,名称,颜色,品种,行为,摇尾巴,

2、吃东西,犬 吠,4,面向对象程序设计在处理对象时,必须遵循的三个原则:,1封装用一个框架把数据和代码组合在一起,形成一个对象。类是支持对象封装的工具,对象则是封装的基本单元。2继承利用继承可以创建分等级层次的类,继承是父类和子类之间共享数据和方法的机制,通常把父类称为基类,子类称为派生类。单继承:一个基类可以有任意数目的派生类,即 一父多子多继承:一个类若有两个或两个以上的直接基类,即一子多父,称为多重继承,C#通过接口来实现3多态性同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。分为静态多态和动态多态,根据参数的差别 直接调用对象方法,根据基类 间接调用对象方法,5,3.2

3、 类,属性集信息是C#语言为程序中定义的各种实体附加一些说明信息,是C#语言的一个重要特征。属于高级编程内容,一般涉及不到。类名:唯一标识名类基:直接基类或接口。默认基类是object类,多个接口之间用逗号相隔类修饰符访问权限、类的类型等,注意同一修饰符不允许出现多次,见表3.1,6,表3.1 类修饰符,示例:class Student / 类主体,7,3.2.2 类的成员,类体(类主体)用于定义该类的成员 用一对花括号 括起来,由两部分组成: 1. 类体中以类成员声明形式引入的类成员包括:常数声明、字段声明、方法声明、属性声明、事件声明、索引器声明、运算符声明、构造函数声明、析构函数声明、静

4、态构造函数、类型声明等 2. 直接从基类继承而来的成员,8,一、成员类型:(1)静态成员 在字段、方法、属性、事件、运算符和构造函数声明中含有public static修饰符(2)实例成员 在字段、方法、属性、事件、运算符和构造函数声明中不含有public static修饰符二、默认成员访问修饰符private,类成员注意点:,9,class Program class AClass public static int x=1; public int y=2; static void Main(string args) AClass ab = new AClass(); Console.Wri

5、teLine(y=0,x=1,ab.y,AClass.x); ,10,1常数声明,常数修饰符 new、public、protected、 private 、 internal public:访问不受限制 protected:访问仅限于包含类或从包含类派生的类型 internal:访问仅限于当前程序集。 private:访问仅限于包含类。类型sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string、枚举类型或引用类型。常数表达式的值类型应与目标类型一致,或者通过隐式转换规则转换成目标类型。,

6、11,例如:class A_const public const int X=10; const double PI=3.14159; / 默认访问修饰符private const double Y= 0.618+3.14;注意1. 常数表达式的值是一个可以在编译时计算的值注意2. 常数声明不允许使用static修饰符,只能通过类访问。class Test public static void Main( ) A_const m = new A_const ( ); Console.WriteLine (“X=0, PI=1,Y=2”, A_const.X , A_const.PI, A_co

7、nst.Y); ,12,2字段声明,语法形式:属性集信息 字段修饰符 类型 变量声明列表;变量声明列表标识符或用逗号“,”分隔的多个标识符,并且变量标识符还可用赋值号“=”设定初始值。字段修饰符new、public、protected、private、 internal、 static、readonly、volatilestatic: 静态变量。利用类直接访问静态变量, 利用类的实例(对象)访问非静态变量readonly:只读变量,声明时或在构造函数中赋值,一旦赋值不可改变。与const常量不同,const常量编译时赋值计算。volatile:表示字段可能被多个并发执行的进程修改。,13,【例

8、3.1】 通过构造函数给只读字段赋值,using System;public class Area public readonly double Radius; / Radius是只读字段 private double x, y ; public double Size ; public static double Sum=0.0 ; public Area ( ) Radius=1.0; / 通过构造函数对radius赋值 class Test public static void Main( ) Area s1 = new Area( ); /s1.Radius = 2; Console.

9、WriteLine (Radius=0, Size=1,Sum=2,s1.Radius,s1.Size , Area.Sum);/ 静态字段通过类访问Area.Sum,实例字段通过对象访问s1.Size Console.Read (); ,出错了!无法修改只读字段,14,3.2.3 构造函数和析构函数,1)实例构造函数的声明语法形式:属性集信息 构造函数修饰符 标识符 ( 参数列表 ) : base ( 参数列表 ) : this ( 参数列表 ) 构造函数语句块 ,public,与类名相同没有返回值,构造函数重载:参数个数或类型不同,调用基类同参数列表的构造函数,调用本类同参数列表的构造函数

10、,15,构造函数修饰符public、protected、internal、private、extern一般地,构造函数总是public类型的。如果是private类型的,表明类不能被外部类实例化。 标识符(参数列表 opt)构造函数名必须与这个类同名,无返回类型和返回值 构造函数可以有0n个参数构造函数重载 3. 用new运算符创建一个类的对象时,类名后的一对圆括号提供初始化列表,系统根据这个初始化列表的参数个数、参数类型和参数顺序调用不同的构造函数。,实例构造函数注意点:,16,【例3.2】 Time类的构造函数及其重载,using System;public class Time priv

11、ate int hour, minute, second; public Time ( ) hour=minute=second=0; public Time (int h) hour=h; minute=second=0; public Time (int h, int m) hour=h; minute=m; second=0; public Time (int h, int m, int s) hour=h; minute=m; second=s; ,public string getTime()return hour.ToString()+:+minute.ToString()+:+s

12、econd.ToString();,Console.WriteLine(t1=0,t1.getTime();,17,【例3.3】 构造函数初始化,using System;class Point public double x, y; public Point( ) x = 0; y = 0; public Point(double x, double y) this.x = x; / 当this在实例构造函数中使用时, this.y = y; / 它的值就是对该构造的对象的引用class Test public static void Main( ) Point a = new Point(

13、 ); Point b = new Point(3, 4);/ 用构造函数初始化对象 Console.WriteLine (a.x=0, a.y=1, a.x, a.y ); Console.WriteLine (b.x=0, b.y=1, b.x, b.y ); Console.Read (); ,a.x=0, a.y=0,b.x=3, b.y=4,18,构造函数注意点:,若类中没有提供构造函数,则CLR会自动提供一个默认的构造函数一旦类中提供了自定义的构造函数,系统则不提供默认的构造函数不必显示调用构造函数实例构造函数不能被继承,19,派生类构造函数的调用,调用时机:创建派生类的对象时,即

14、 new构造函数不被继承派生类构造函数在执行前,首先显式或隐式地调用基类构造函数默认调用基类的无参数构造函数除非显式地指定调用有参数构造函数this关键字引用类的当前实例base关键字用于从派生类中访问基类的成员调用基类上已被其他方法重写的方法指定创建派生类实例时应调用的基类构造函数,20,【例3.4】 派生类构造函数及其调用,using System;class Point private int x, y; public Point() x = 0; y = 0; Console.WriteLine (Point() constructor : 0 , this ); public Poi

15、nt(int x, int y) this.x = x; this.y = y; Console.WriteLine (Point(x,y) constructor : 0 , this ); class Circle : Point private double radius; public Circle () / 默认约定调用基类的无参构造函数Point() Console.WriteLine (Circle () constructor : 0 , this ); public Circle (double radius ): base ( ) this.radius = radius;

16、 Console.WriteLine (Circle (radius) constructor : 0 , this ); public Circle (int x, int y, double radius ): base (x, y ) this.radius = radius; Console.WriteLine (Circle (x, y, radius) constructor : 0 , this ); ,class Test static void Main() Point a = new Point(); Circle b = new Circle (3.5); Circle

17、c = new Circle (1, 1, 4.8);Console.Read (); ,1,3,2,5,4,21,2)静态构造函数的声明语法形式:属性集信息 静态构造函数修饰符 标识符()静态构造函数体 静态构造函数修饰符 extern static 或者static extern 。如有extern修饰,则是一个外部静态构造函数,不提供任何实际的实现,静态构造函数体仅仅是一个分号 标识符 是静态构造函数名,必须与类同名且不能有参数 静态构造函数体只能对静态数据成员进行初始化,22,静态构造函数不可继承,不能直接调用调用时机: 创建类的实例 引用类的任何静态成员至多被执行一次若类没有声明静态

18、构造函数,而又包含带有初始设定的静态字段时,编译器会自动生成一个默认的静态构造函数,静态构造函数注意点:,23,2析构函数,语法形式:属性集信息 extern 标识符 ( ) 析构函数体 标识符必须与类名相同,前面需加“” 析构函数不能写返回类型,也不能带参数,一个类最多只能有一个析构函数,24,析构函数注意点,析构函数不能由程序显式地调用,而是由系统在释放对象时自动调用派生类对象的析构函数调用链:1)执行派生类的析构函数2)执行基类的析构函数,直到调用object类的析构函数为止,与执行构造函数的顺序相反,25,第3章 面向对象编程基础,1. 理解基本概念2. 理解类3. 使用构造函数4.

19、学习方法5. 学习属性,掌握,26,回顾,对象 具有属性和操作(方法)的实体类 对象的抽象,抽象的数据类型类是对象的模板对象是类的具体化 或 类的实例,27,类的成员,1.类体中以类成员声明形式引入的类成员包括:常数声明、字段声明、构造函数声明、析构函数声明、静态构造函数、方法声明、属性声明等2. 直接从基类继承而来的成员,28,访问修饰符,ublic访问不受限制protected只能被本身或派生类的实例访问private只能被本身访问static静态,非实例,29,构造函数,构造函数实例构造函数与类名同名在类进行new运算(即类实例化时)this :引用当前类的实例base:用于从派生类中访

20、问基类的成员调用基类上已被其他方法重写的方法指定创建派生类实例时应该调用的基类构造函数调用顺序先基类后派生类,30,3.3 方法,1. C#中所有的变量、方法都必须封装在类中2. 对象间、类间只能通过类所提供的方法进行互操作3. 从方法的声明、方法的参数、静态方法与实例方法、方法的重载与覆盖等方面理解,31,表3.2 方法修饰符,32,表3.3 修饰符的无效组合,33,【例3.6】 下面程序中的StackTp类定义了几个方法以模拟实现一个压栈操作。,using System;class StackTp int MaxSize; int Top; int StkList; public Stac

21、kTp ( ) / 构造函数 MaxSize=100; Top=0; StkList=new int MaxSize; public StackTp(int size) / 构造函数 MaxSize=size; Top=0; StkList=new int MaxSize; public bool isEmptyStack() / 方法 if (Top=0) return true; else return false; public bool isFullStack() if (Top=MaxSize)return true; else return false; public void p

22、ush(int x) StkListTop=x; Top+; ,class Test public static void Main() StackTp ST = new StackTp(20); string s1; if (ST.isEmptyStack() ) / 调用方法 s1=Empty; else s1=not Empty; Console.WriteLine (Stack is + s1); for (int i=0; i20; i+) ST.push(i+1); if ( ST.isFullStack() ) / 调用方法 s1=Full; else s1=not Full;

23、Console.WriteLine (Stack is + s1); Console.Read ();,34,3.3.2 方法的参数,形参(形式参数):声明方法时包含的方法参数说明实参(实际参数):调用方法时给出的实际参数在C#中实参与形参有4种传递方式:值参数引用参数ref输出参数out参数数组params,1值参数 在方法声明时不加修饰的形参就是值参数,它表明实参与形参之间按值传递 在方法中对形参的修改不影响外部的实参 属于输入参数,35,【例3.7】 演示了当方法Sort传递的是值参数时,对形参的修改不影响其实参。,36,是值参数传递方式,形参另外分配一块内存,接受实参的引用值副本1.

24、对引用值的修改不会影响实参2. 如果改变的是所引用的对象,则将会影响实参所引用的对象,值参数传递引用对象,内存首地址,37,【例3.8】 程序演示的是当方法传递的是一个引用对象(如数组)时,对形参的修改会影响到实参,改变了引用的对象,查询最小值,38,2. 引用参数,引用参数形参的改变影响实参例3.7中 实际变量a、b、c是不随形参x、y、z的,但如果想改变实际变量a、b、c的值,则用引用参数,39,【例3.7】 演示了当方法Sort传递的是值参数时,对形参的修改不影响其实参。,40,2. 引用参数,引用参数形参的改变影响实参例3.7中 实际变量a、b、c是不随形参x、y、z的,但如果想改变实

25、际变量a、b、c的值,则用引用参数C#用ref修饰符 声明 引用参数引用参数不创建新的存储单元,与方法调用中的实际参数变量同处一个存储单元传递内存地址属于输入参数,41,【例3.9】 将例3.7程序中Sort方法的值参数传递方式改成引用参数传递,这样在方法Sort中对参数x、y、z按从小到大的排序影响了调用它的实参a、b、c。,using System;class Myclass public void Sort (ref int x, ref int y, ref int z) int tmp; / tmp是方法Sort的局部变量 / 将x, y, z按从小到大排序 if (xy) tmp=

26、x; x=y; y=tmp; if (xz) tmp=x; x=z; z=tmp; if (yz) tmp=y; y=z; z=tmp; ,class Test static void Main() Myclass m = new Myclass ( ); int a, b, c; a=30; b=20; c=10; m.Sort (ref a, ref b, ref c); Console.WriteLine (a=0, b=1, c=2 , a, b, c ); Console.Read(); ,42,使用ref声明引用参数的注意:(1)方法的参数声明中ref关键字仅对紧跟在它后面的参数有

27、效,而不能应用于整个参数表。例如,Sort方法中x、y、z都要加ref修饰(2)在方法的调用中也要用ref修饰实参,且实参必须为变量,实参和形参的数据类型必须完全匹配(3)在方法外(方法调用前),ref参数必须明确赋值(4) ref参数也可以用于传递引用类型的对象,43,第3章 面向对象编程基础,方法声明如同C语言的“函数”访问修饰符默认为public方法参数值参数(值类型、引用类型)引用参数ref输出参数out参数数组params,方法,44,方法重载与覆盖方法签名方法覆盖new 和 虚方法virtual override属性propertyget访问器set访问器,45,3. 输出参数,1

28、. 用法与ref参数相似, 但为输出参数值2. 只能用于从方法中传出值,因此必须在方法结束之前对out参数赋值3. 在参数前加out修饰符的形式参数4. out参数也可以用于传递引用类型的对象,46,【例3.10】 求一个数组中元素的最大值、最小值和平均值。,using System;class Myclass public void MaxMinArray (int a, out int max, out int min, out double avg ) int sum ; sum = max = min = a0 ;for (int i=1; imax) max=ai; if (aimi

29、n) min=ai; sum+=ai;avg=sum / a.Length; ,47,【例3.11】 下面程序定义了两个方法,一个是Swap1,一个是Swap2,它们都有两个引用对象作为参数,但Swap2的参数加了ref修饰,调用这两个方法产生的结果是不一样的。,using System;class Myclass public void Swap1 (string s, string t) string tmp; tmp=s; s=t; t=tmp; public void Swap2 (ref string s, ref string t) string tmp; tmp=s; s=t;

30、t=tmp; ,class Test static void Main() Myclass m = new Myclass ( ); string s1=ABCDEFG, string s2=134567; m.Swap1(s1,s2); Console.WriteLine (s1=0 , s1 ); Console.WriteLine (s2=0 , s2 ); m.Swap2(ref s1, ref s2); Console.WriteLine (s1=0 , s1 ); Console.WriteLine (s2=0 , s2 ); Console.Read (); ,s1,s2的引用并

31、没有改变,s1,s2的引用互相交换了,48,4参数数组,3.3.3 静态方法与实例方法,特点:参数为可变长度 使用params关键字来指定一个可变长度的参数表注意:1. 一个方法中只能声明一个params参数2. params参数必须放在参数表最后3. params参数是一个一维数组,参数数组的参数:0n4. params不可与ref、out修饰符组合使用,1. 静态方法用static修饰2. 只能访问类中的静态成员,49,【例3.12】 下面程序演示了Myclass类中的方法MaxMin有一个参数数组类型的参数,在调用这个方法时具有灵活性。,using System;class Myclas

32、s public void MaxMin (out int max, out int min, params int a ) / 如果可变参数为零个, / 取一个约定值或产生异常 if (a.Length=0) max=min=1; return ; max = min = a0 ; for (int i=1; imax) max=ai;if (aimin) min=ai; ,class Test static void Main() Myclass m = new Myclass ( ); int score = 87,89,56,90,100,75,64,45, 80, 84 ; int

33、smax, smin; m.MaxMin (out smax, out smin); / 可变参数的个数可以是零个 Console.WriteLine (Max=0, Min=1 , smax, smin ); m.MaxMin (out smax, out smin, 45, 76, 89, 90 ); / 在4个数之间找最大、最小 Console.WriteLine (Max=0, Min=1 , smax, smin ); m.MaxMin (out smax, out smin, score); / 可变参数也可接受数组对象 Console.WriteLine (Max=0, Min=

34、1 , smax, smin ); Console.Read (); ,50,3.3.4 方法的重载与覆盖,方法重载同一个类中存在具有相同方法名,但具有不同的形式参数个数、修饰符及类型的两个或两个以上的方法。 重载是多态的形式之一。编译时根据调用时给出的实参个数和类型调用相应的方法,以实现多态方法签名:方法名、形参个数、形参修饰符、形参类型 一起构成方法签名,51,【例3.14】 下面程序定义的Myclass类中含有4个名为max的方法,但它们或者参数个数不同,或者参数类型不同,在Main调用该方法时,编译器会根据参数的个数和类型确定调用哪个max方法。,using System;class

35、Myclass public int max (int x, int y) return x=y ? x : y ; public double max (double x, double y) return x=y ? x : y ; public int max (int x, int y, int z) return max ( max (x, y), z) ; public double max ( double x, double y, double z) return max ( max (x, y), z) ; ,class Test static void Main() Myc

36、lass m = new Myclass ( ); int a, b, c; double e, f, g ; a=10; b=20; c=30; e = 1.5; f = 3.5 ; g = 5.5; Console.WriteLine (max(0,1)= 2 ,a,b, m.max(a,b); Console.WriteLine (max(0,1,2)= 3 ,a,b,c, m.max(a,b,c); Console.WriteLine (max(0,1)= 2 , e,f,m.max(e,f); Console.WriteLine (max(0,1,2)= 3 ,e,f,g, m.ma

37、x(e,f,g); Console.Read (); ,52,方法的覆盖使用new隐藏有相同签名的方法,1. 当派生类与基类有相同名称或签名的成员时,在派生类中默认隐藏基类成员,但提示警告2. 在派生类成员声明中加new修饰符,可以取消警告信息3. 基类对象被引用到派生类对象时,访问的仍是基类的方法,静态多态,53,【例3.15】 定义了一个基类Shape,含有字段域width和height,分别表示形状的宽和高,并定义了一个area方法,求形状的面积。它的派生类Triangle和Trapezia都用关键字new修饰了area方法,using System;class Shape protec

38、ted double width; protected double height; public Shape( ) width=height=0; public Shape(double x) width=height=x; public Shape(double w, double h ) width=w;height=h; public double area ( ) return width*height; class Triangle : Shape / 三角形 public Triangle (double x, double y):base(x,y) new public dou

39、ble area ( ) / 派生类方法与基类方法同名,编译时会有警告信息 return width*height/2 ; class Trapezia : Shape / 梯形 double width2 ; public Trapezia(double w1, double w2, double h) : base (w1, h) width2=w2; new public double area ( ) / 加new隐藏基类的area方法 return (width+width2)*height/2 ; ,class Test static void Main() Shape A = n

40、ew Shape(2, 4); Triangle B = new Triangle(1, 2); Trapezia C = new Trapezia(2, 3, 4); Console.WriteLine(A.area= 0 , A.area(); / 调Shape的area方法 Console.WriteLine(B.area= 0 , B.area(); / 调Triangle的area方法 Console.WriteLine(C.area= 0 , C.area(); / 调Trapezia的area方法 A = B; / 在C#中,基类的引用也能够引用派生类对象 Console.Wri

41、teLine(A.area= 0 , A.area(); / 调Shape的area方法 A = C; Console.WriteLine(A.area= 0 , A.area(); / 调Shape的area方法 Console.Read(); ,基类方法,54,虚方法:基类的方法用关键字virtual修饰对基类的虚方法重载:派生类用关键字override修饰与基类中虚方法有相同签名的方法注意:(1)不能将虚方法声明为静态的(static)(2)不能将虚方法声明为私有的(private)(3)覆盖方法必须与它相关的虚方法匹配(4)一个覆盖方法覆盖的必须是虚方法,实现运行时多态(动态绑定),5

42、5,【例3.16】 将例3.15改写,Shape类中的方法area用virtual修饰,而派生类Triangle和Trapezia用override修饰area方法。,using System;class Shape protected double width; protected double height; public Shape( ) width=height=0; public Shape(double x) width=height=x; public Shape(double w, double h ) width=w; height=h; public virtual dou

43、ble area ( ) / 基类中用virtual修饰符声明一个虚方法 return width*height; class Triangle: Shape / 三角形 public Triangle (double x, double y):base(x,y) public override double area ( ) / 派生类中用override修饰符覆盖基类虚方法 return width*height/2 ; class Trapezia : Shape / 梯形 double width2 ; public Trapezia(double w1, double w2, dou

44、ble h) : base (w1, h) width2=w2; public override double area ( ) 派生类中用override修饰符覆盖基类虚方法 return (width+width2)*height/2 ; ,class Test static void Main() Shape A = new Shape(2, 4); Triangle B = new Triangle(1, 2); Trapezia C = new Trapezia(2, 3, 4); Console.WriteLine(A.area= 0 , A.area(); / 调Shape的ar

45、ea方法 Console.WriteLine(B.area= 0 , B.area(); / 调Triangle的area方法 Console.WriteLine(C.area= 0 , C.area(); / 调Trapezia的area方法 A = B; Console.WriteLine(A.area= 0 , A.area(); / 调派生类Triangle的area方法 A = C; Console.WriteLine(A.area= 0 , A.area(); / 调派生类 Trapezia的area方法 Console.Read();,派生类方法,56,3.4 属性propert

46、y,回顾一下 例3.2(P51)。为了实现良好的数据封装和数据隐藏,类的字段成员的访问属性一般设置成private(默认)或protected利用public 方法来访问私有的或受保护的字段,57,【例3.2】 Time类的构造函数及其重载,using System;public class Time private int hour, minute, second; public Time ( ) hour=minute=second=0; public Time (int h) hour=h; minute=second=0; public Time (int h, int m) hour

47、=h; minute=m; second=0; public Time (int h, int m, int s) hour=h; minute=m; second=s; ,class Test static void Main() Time t1, t2, t3, t4 ; t1= new Time (); t2 = new Time(8); t3 = new Time(8, 30); t4 = new Time(8,30,30); t1.getTime(); t2.getTime(); t3.getTime(); t4.getTime(); ,58,3.4 属性,保持原有的数据封装和数据隐

48、藏,类的字段成员的访问属性仍然设置成private(默认)或protected?不利用public方法来访问私有的或受保护的字段 属性(property)属性值的读/写与字段域语法相同;利用get和set访问器实现属性值的读/写,如何做?,59,语法形式:属性集信息 属性修饰符 类型 成员名 访问器声明 属性修饰符与方法修饰符(public,private,protected,)相同,包括new、static、virtual、abstract、override和4种访问修饰符的合法组合,遵循相同的规则。 访问器声明声明属性的访问器,get访问器或set访问器,或者两个语法形式:get / 读访

49、问器 / 访问器语句块 set / 写访问器 / 访问器语句块 ,属性的声明方法,60,1. get访问器1. 返回值类型与属性的类型相同2. 在语句块中的return语句必须有一个可隐式转换为属性类型的表达式2. set访问器1. 没有返回值2. 有一个隐式的值参数value,类型与属性的类型相同。3. 属性的种类1. 读/写属性:同时包含get和set访问器的属性2.只读/只写属性:只包含get或set访问器的属性,属性中的访问器使用注意,61,【例3.17】 对TextBox类的text、fontname、fontsize、multiline域提供属性方式的读/写访问。,using Sy

50、stem;class TextBox private string text; private string fontname; private int fontsize; private bool multiline; public TextBox ( ) text=text1; fontname=宋体; fontsize=12; multiline=false; public string Text / Text属性,可读可写 get return text; set text=value; public string FontName / FontName属性,只读属性 get retu

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号