版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、类、对象和命名空间,类的概念,关键字:class 类是成员变量和成员方法的集合 在 C语言中,单一的数据类型难以描述复杂的事物,于是引入了结构体;在大型的程序设计中纯粹的过程难以管理复杂而庞大的操作,于是引入了类。类是程序代码分类管理的必然结果,类的示例,class Student public int id; public string name = Jackson; public int age = 20; public void SelfIntr() Console.WriteLine(学号是: + id); Console.WriteLine(姓名是: + name); Console
2、.WriteLine(年龄是: + age); ,自定义类名,类中的成员变量,有时也被称为字段,可进行初始化赋值,若未赋值,则有默认值,类中定义的成员方法,对象(I),对象是类的实例化体现 每个对象都拥有各自的成员变量和成员方法 通过对象可以使用类中的变量和方法,类似于 C 语言中的结构体变量 利用类名创建对象,类似于用数据类型创建变量一样,对象(II),创建对象实例,并调用对象方法: Student stu1 = new Student(); Student stu2 = stu1;/利用已有对象为新对象赋值(指针) stu1.SelfIntr(); stu2.SelfIntr(); 改变对
3、象中成员变量的值 Student stu3 = new Student(); = Kitty; stu3.SelfIntr();,id = 0 name = Jackson age = 20,堆,若通过stu2去改变其中成员变量的值,对stu1也有影响,匿名对象,如果临时需要使用类中的一个方法,我们可以利用匿名对象来调用,而不必显示地创建一个对象,如: Student stu = new Student(); stu.selfIntr(); 这两条语句可以直接写成下面的形式: new Student().selfIntr();,属性和方法,属性:描述事物的特征(成员变量)
4、方法:事物所具有的功能(成员方法),方法的格式,既无参数也无返回值的方法,如: void fun() 有参数但无返回值的方法,如: void fun(int a, char ch) 无参数但有返回值方法,如: double fun() 既有参数又有返回值的方法,如: int fun(string s),方法中的参数(I),方法中参数的传递 值传递、引用传递-ref、输出参数-out,例: class Test static void Main()void fun(ref int x, ref int y) int t = x;int a = 3, b = 5;x = y;new Test().
5、fun(ref a, ref b);y = t;Console.WriteLine(a = + a);Console.WriteLine(a = + a); 将上面代码中的 ref 关键字去掉,就成了按值传递,再把 ref 换成 out 试试!,方法中的参数(II),ref 与 out 的区别: 1、ref 必须在函数体外初始化。 2、out 必须在函数体内初始化,在外面初始化没意义。也就是说,out型的参数在函数体内不能得到外面传进来的初始值。 3、两者在函数体的任何修改都将影响到外面。,变长参数,使用变长参数可以接收多个不确定个数的参数,用关键字 params。变长参数必须位于形参列表的最
6、后,而且只能是一维数组。params 不能与 ref 和 out 联用:,方法中的 return 关键字,如果方法的返回值类型不是void,那么在方法内部必须要有 return 语句 如果返回值类型为void,那么 return 语句在方法内部可有可无。若写上了return 关键字,其后面不加返回值,return 可以结束当前方法的调用 注意可能会出现无法访问的语句,this 关键字,方法中的变量会隐藏掉同名的成员变量 class Test public int num=3; public void fun() int num=7; Console.WriteLine(num=+num); 注
7、:this 关键字仅代表当前类的对象!,如何在 fun() 方法内使用此处的 num 变量呢?,使用 this 关键字,代表当前类的对象,调用类中的直接成员,Console.WriteLine(this.num=+this.num);,方法的重载,方法名相同,但方法中参数的个数、类型及顺序不同,即为重载 方法的返回值不参与重载。如下: void fun(int x); int fun(int x); void fun(int x); int fun(int x, int y); void fun(int x, double y); void fun(double y, int x);,不是重载
8、,编译报错,是重载,可以使用,是重载,可以使用,构造方法(I),完成对类实例对象的初始化工作。一般(通过方法的参数)用来对类的成员变量进行初始化操作。有以下几点特征: 1、具有与类相同的名称 2、没有返回值类型 3、该方法内部没有 return 语句 当一个新的对象生成时,构造方法由系统自动调用,而且只执行一次 例:战士们进入阵地时,每个人都会自动完成卧倒、瞄准等动作,指挥官没有必要一一告诉,构造方法(II),每个类都必须要有构造方法 如果我们在类中没有显式地定义构造方法,系统将提供一个不带参数的、什么都不做的构造方法 一旦我们定义了构造方法,系统将不再提供默认的构造方法,class Stud
9、ent int id; string name; public Student (int id, string name) this.id = id; = name; ,一旦在构造方法前面加上了void 关键字,那么它将成为一个普通的成员方法!,构造方法的重载,class Student public int id = 2; public string name = Tom; public int age = 21; public Student(int id, string name, int age) this.id=id; =name; this.a
10、ge=age; public Student(int id, string name) this.id=id; =name; public Student() ,/以下是主方法中的操作 public static void main(Stringargs) Student stu1=new Student(); Student stu2=new Student(103,Mike); Student stu3=new Student(107,Mary,18); ,含有三个参数的构造方法,含有二个参数的构造方法,无参构造方法,析构方法,以符号开头,用于执行清除关闭工作 不接收参数
11、、没有返回值、没有修饰符 析构方法不能重载 一个类只能有一个析构方法 在垃圾收集器抛弃一个对象之前,先调用析构方法 不能手动调用,只能由垃圾器调用,封装,用 public 关键字修饰的类中成员,在类的外部就可以随意调用。但这样的写法安全性差 class Test const double PI = 3.14; public double s; public double GetS(int r) s = PI * r * r; return s; ,s的值在类外部可以随意改动,造成错误结果,将代码改为: private double s; 这样一来,外界无法直接调用s,避免出错。,封装的作用在于
12、保证类中重要成员的私有性和安全性!,公共访问器,在实际开发中最好把所有的成员变量都设置为 private,若要读取或设置该成员变量的值,可以编写公共访问器方法。这样做便于代码的维护和修改 在公共访问器中,我们可以对变量的合法性进行检验,还可以尽量避免修改代码时产生 “牵一发而动全身” 的情况出现 公共访问器以 Get 或 Set 作为前缀 见示例:,静态成员,在类中,用 static修饰的静态成员从一开始就存在,而无须用 new 来创建;也就是说在类的对象产生之前,static 成员就已经出现了;没有用static修饰的成员被称为“实例成员” 无论创建多少类的实例对象,它们都共用同一个(组)s
13、tatic 成员 static 成员只能用类名直接调用 静态方法中不能使用 this 关键字,静态与实例成员的相互调用,静态方法不能调用实例成员 实例方法可以调用静态成员,静态成员空间,实例空间,实例空间,实例空间,命名空间,命名空间用以避免类名的冲突,对类再进一步分类(见示例:) 创建命名空间用 namespace关键字,导入命名空间用 using关键字(using 别名=命名空间名;) 在 C# 的文件中可以出现多个命名空间,而且可以使用大括号分层嵌套 可以使用 . 创建一个命名空间的子空间 using导入的成员名会被当前空间中的同名成员所隐藏,此时需要使用限定名称,装箱与拆箱,是值类型与引用类型间的相互转换 在C#中每一种类型都是从System.Object类派生而来的 值类型转换成对象:装箱 对象转换成值类型:拆箱 int myInt1 = 28; object myObject = myInt1;/装箱 string str = myInt1.ToString();/装箱 int myInt2 = (int)myObject;/拆箱,object 与 System.Object 是相同的,is 运算符,is 运算符用于检查某一变量或对象是否与指定类型兼容,以确定是否可以进行相应的转换 static void Main() Te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论