版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、类和方法方法的使用,参数的传递,类的成员,类和结构都是复合类型,它们可以包含数据成员、函数成员和嵌套成员。 例如,class Person string name; int height; public void Eat (string food) Console.WriteLine(Eat 0,food);,数据成员,函数成员,强调:name、height等字段本身没有获得实际的存储空间,只有类被实例化之后才会被分配,成员访问限制(认证教材P88,非认证P49,private(私有):用于成员访问限制,表示不允许外部对象访问该成员。 例,class Student private strin
2、g name; private void Write() Console.WriteLine(name);,Student s1 = new Student(); Console.WriteLine(); s1.Write(,public 公有:用于类型和成员访问限制,修饰成员时表示允许外部对象访问该成员,修饰类型时表示允许外部程序集使用该类型。 例,class Student public string name; public void Write() Console.WriteLine(name);,Student s1 = new Student(); Console.W
3、riteLine(); s1.Write(,问题:为什么同样的代码,在之前的例子里是错误的,而在这里是正确的,静态成员与非静态成员,非静态成员属于类型的实例(对象)所有。 静态成员属于类型本身所有,不随具体对象的变化而变化。使用时要通过类名而不是通过对象名来访问。 例如,class Student public string name; Student s1 = new Student(); Console.WriteLine(,class Student public string name; public static string school; Studen
4、t s1 = new Student(); Console.WriteLine(); Console.WriteLine(Student.school,类的成员:字段,一般字段 常量字段:为了防止程序对某些值进行修改,可以使用关键字const将这些字段定义为常量字段。常量字段必须在定义时进行赋值,之后只能读取而不允许修改。常量字段是静态的,只能通过类进行访问。 只读字段:有些常量是针对对象的,比如身份证号码、银行卡号码都是不能修改的,使用关键字readonly定义这些字段。它们只能在对象创建时被赋值,而后不允许再修改,案例分析,class Student public const
5、 string City = FuZhou;/常量字段 public static string school = 闽江学院;/静态字段school public readonly string idNum;/只读字段,身份证号 public string name; public int age; public void WritePersonalInfo() Console.WriteLine(0,1,2,3,school,idNum,name,age); public Student(string id)/构造函数实现对只读字段赋值 idNum = id;,class Program s
6、tatic void Main(string args) Student s1 = new Student; = ZhangSan; s1.age = 20; s1.WritePersonalInfo(); Console.WriteLine(s1.idNum); s1.idNum = 123456; s1.school = 福州大学; Console.WriteLine(Student.school); Console.WriteLine(Student.City); Console.Read();,问题:这些语句,哪些可以执行,哪些不
7、可以,思考,类的静态成员和非静态成员有什么区别? 常量字段和只读字段有区别吗?区别在哪,属性,属性实现对数据的良好封装,主要用于控制对字段的访问。 使用get和set访问器实现对私有字段的读取和设置,方法,方法(method)又称为函数(function),使用方法有很多优点: 1) 分而治之;方法允许将程序分为不连续的逻辑单元。调试单独的单元与调试不包含过程的整个程序相比要容易。 2) 代码重用;可以在其他程序中使用为某个程序开发的方法,而通常只需少量修改甚至不需修改。 3) 可读性强; 4) 封装代码,使得方法的使用者不需要知道方法的实现细节,就可以使用这些方法,实例方法和静态方法,方法有
8、实例方法和静态方法之分 1) 实例方法:通过对象名调用的方法。 2) 静态方法:与类关联,调用时用类来调用。定义时需要使用static关键字,静态方法,Main方法 static void Main(string args) 1) Main方法是程序入口点,程序通过调用Main方法开始执行 2) 程序启动时,还没创建类对象。所以Main方法声明为静态的,使得程序可以调用Main方法而不必创建对象,Math类的方法大多数都是静态方法,比如 Abs,Pow,Sqrt这些方法,实例方法,Random类的Next方法:用于产生随机数 1) 创建对象:Random myRandom = new Rand
9、om(); 2) int randomValue = myRandom.Next() 3) myRandom.Next(6)返回的随机数范围为0,6),也就是0,1,2,3,4,5 4) myRandom.Next(1,7)返回的随机数范围为1,7,思考:如果要产生的随机数范围是: 2,5,8,11,14,使用表达式2 + 3 * myRandom.Next(5) 规律:起始数 + 递增值 * 对象名.Next(整数的个数,代码分析:掷色子,掷20次色子,并输出结果,结果分4行显示,static void Main(string args) const int times = 20; Rand
10、om myRandom = new Random(); int face = 0; for (int i = 1; i = times; i+) face = myRandom.Next(1, 7); Console.Write(0,-2, face); if (i % 5 = 0) Console.WriteLine();,Console.Write(0,-21, face, i % 5 = 0 ? n :,问:要求投掷色子2000次,求每个面各出现的次数和百分比,如何实现,自定义方法,实例方法 修饰符 返回类型 方法名(参数列表) 方法体,静态方法 修饰符 static 返回类型 方法名(
11、参数列表) 方法体,其中方法修饰符可以是下列修饰符的有效组合: public ,protected,private,internal,virtual,sealed,override,abstract,extern,参数传递(非认证教材p53,认证教材P98,参数传递有按值传递和按引用传递两种方式 参数的数据类型分值类型,引用类型 组合起来就有4种情况: 按值传递值类型,按引用传递值类型, 按值传递引用类型,按引用传递引用类型,按值传递值类型,按引用传递值类型,class Program static void Main(string args) int input = 10; test1(in
12、put); Console.WriteLine(input); test2(ref input); Console.WriteLine(input); static void test1(int x) x = 2 * x; static void test2(ref int x) x = 2 * x;,按值传递引用类型,按引用传递引用类型,class Program static void Main(string args) int firstArray = new int 1, 2, 3 ; test3(firstArray); foreach (int i in firstArray) C
13、onsole.Write(0,-3, i); Console.WriteLine(); static void test3(int arr) for (int i = 0; i arr.Length; i+) arri = 2 * arri; arr = new int 11, 12, 13 ;,总结,按值传递值类型,按引用传递值类型的区别: 方法修改形参变量的值,按值传递值类型不影响实际参数,按引用传递值类型会影响实际参数 按值传递数组,按引用传递数组的区别: 方法修改形参数组元素的值时,会影响实参数组元素的值,案例分析(非认证教材P54,static void Main() int a =
14、 10, b = 20; ValueSwap(a, b); Console.WriteLine(值传递: a = 0, b = 1, a, b); ReferenceSwap(ref a, ref b); Console.WriteLine(引用传递: a = 0, b = 1, a, b); Console.ReadLine(); public static void ValueSwap(int x, int y) int z = x;x = y; y = z; public static void ReferenceSwap(ref int x, ref int y) int z = x;
15、 x = y; y = z;,out参数(认证教材98,非认证教材p54,一般情况下,调用方法时,实际参数必需是已经初始化过的,而且方法(如果有返回值)只有一个返回值。out修饰的参数,调用方法前不需要对参数进行初始化,而且可以让方法一次调用就可以返回多个结果。 out修饰的参数的传递方式也是按引用传递 例如: 定义一个方法,求一个整数数组的平均值,最大值,代码分析:out参数的使用,static void Main(string args) int web1Score = new int 34, 78, 23, 66 ; double avg; int max; GetAvgMax(out
16、avg, out max, web1Score); Console.WriteLine(平均值为0, avg); Console.WriteLine(最大值为0, max); static void GetAvgMax(out double avg, out int max, int score) int sum = 0; max = score0; for (int i = 0; i max ? scorei : max; avg = sum * 1.0 / score.Length;,思考,用out声明的变化和用ref声明的变量有什么共同点和区别? 两者都是引用型参数,在方法中对变量做的任
17、何修改都会反映在变量上。 用out声明的参数无需初始化 用ref声明的参数需要初始化才能使用,params参数(认证教材97,非认证教材p55,一般情况下,调用方法时,实际参数的类型,数量必须与形式参数的一致。 params参数也称为参数数组,是表示数组类型的参数。在调用时,实参不需要用params关键字,实参可以是任意个数的变量,也可以是数组。 params参数只能做为参数列表的最后一个参数 params参数不能再用ref或out参数,代码分析:params参数的使用,static void Main(string args) / int web1Score = new int 34, 78
18、, 23, 66 ; double avg; int max; GetAvgMax(out avg, out max, 34, 78, 23, 66); Console.WriteLine(平均值为0, avg); Console.WriteLine(最大值为0, max); static void GetAvgMax(out double avg, out int max, params int score) int sum = 0; max = score0; for (int i = 0; i max ? scorei : max; avg = sum * 1.0 / score.Len
19、gth;,代码分析:请给出以下程序的运行结果,static public int Sum(params int array) int s = 0; for (int i = 0; i array.Length; i+) s += arrayi; return s; static void Main(string args) int a = 1,2,3,4,5,6,7,8; int x = Sum(a); int y = Sum(1,3,5,7); int z = Sum(10,20,30); Console.WriteLine(0,1,2,x,y,z); Console.Read();,课堂练
20、习,下列语句是MyClass的一部分,obj是MyClass的一个对象。 void change(int i,int arr) i+; arr = new int 20, 40 ; public void test() int a = 101; int myArray = new int 1, 2, 3 ; change(a,myArray); Console.WriteLine(0,1, a, myArray0); 则调用obj.test()后。控制台输出(,下列语句是MyClass的一部分,obj是MyClass的一个对象。 void change(ref int i,ref int ar
21、r) i+; arr = new int 20, 40 ; public void test() int a = 101; int myArray = new int 1, 2, 3 ; change(ref a, ref myArray); Console.WriteLine(0,1, a, myArray0); 则调用obj.test()后。控制台输出(,以下语句输出结果为 _ class Hello static void Main() short shs=2,4,6,8; int n=1; int m=+shs-n; Console.WriteLine(m);,方法重载,方法重载:一个类中可以声明同名方法,只要其参数不同(参数个数,类型,顺序,public class MethodOverload /参数类型为int public int Square(int intValue) return intValue * intValue; /参数类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 对数函数及性质课件
- 2024年版道路桥梁建设项目招标合同版B版
- 2024年智能交通管理系统开发与应用协议
- 2024年土地置换与乡村旅游资源开发合同3篇
- 五年级上册第五单元综合性学习课件
- 2025年柳州货运从业资格证怎么考试
- 2025年广州货运从业资格证模拟考试试题
- 2025年鹤岗货运从业资格证模拟考
- 2025年陕西从业资格货运资格考试题库及答案
- 2025年南宁年货运资格证考试题
- 北京开放大学《自动控制技术及应用》终结性考试复习题库(附答案)
- 高中高一级部拔河比赛活动实施方案
- 无人机测绘操控员培训计划及大纲
- 航空机务专业职业生涯规划书
- 新疆阿克苏市2022-2023学年九年级上学期期末历史试题(无答案)
- 我的家乡德州禹城宣传介绍模板
- 迎元旦趣味活动及知识竞赛试题及答案
- SH/T 3543-2007 石油化工建设工程项目施工过程技术文件规定
- 英语15选10练习题
- 《子路曾皙冉有公西华侍坐》理解性默写
- 赵氏孤儿文言文原文及翻译
评论
0/150
提交评论