C#对象的创建和使用
C# 是面向对象的编程语言,所有的问题都通过对象来处理,对象可以通过操作类的属性和方法解决相应的问题,所以了解对象的产生、操作和销毁对学习 C# 是十分必要的。
下面将讲解对象在 C# 语言中的应用。
在 C# 语言中,使用 new 关键字来创建对象。之前在讲解构造函数时,介绍过每实例化一个对象就会自动调用一次构造函数,实质上这个过程就是创建对象的过程。
准确地说,可以在 C# 语言中使用 new 关键字调用构造函数创建对象,其语法格式如下:
每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都有自己的生命周期。当一个对象的生命周期结束时,对象就变成了垃圾,由 .NET 自带的垃圾回收机制处理。
例如,创建一个控制台应用程序,在程序中创建一个 Plane 类,用于表示飞机类;在该类中定义一个 X 属性、Y 属性和 ShowInfo 方法;然后在 Program 类中创建 Plane 类的对象,并使用该对象调用其中的属性和方法。代码如下:
在其他语言中需要手动回收废弃对象,但是 C# 拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存空间,垃圾回收器将自动回收无用、但占用内存空间的资源。
以下两种情况下的对象会被 .NET 垃圾回收器视为垃圾:
1) 如果对象引用超过其作用范围,则这个对象将被视为垃圾,如下图所示。
图 1 对象引用超过其作用范围时将被销毁
2) 将对象设为 null 值,如下图所示。
图 2 对象被设为null值时被将销毁
例如,现在我国正在推行分类垃圾处理,我们可以把大的“垃圾”作为一个分类,而具体的垃圾分类(如“可回收垃圾”“不可回收垃圾”“厨余垃圾”和“有害垃圾”等)就可以作为具体的对象。
当然,我们说类是有层次结构的,也就是类在一个整体的层次结构中,既可以作为子类,也可以作为其他类的父类。例如这里提到的具体垃圾分类还可以作为其他具体对象的父类,如可以将有害垃圾作为一个父类,而将有害垃圾中的电池作为对象,以此类推。
又如,我们可以把水果看作一个类,而具体的水果,如葡萄、草莓、桃子等,就可以作为水果类的对象。
综上所述,可以看出类与对象的区别是,类是具有相同或相似结构、操作和约束规则的对象组成的集合,而对象是某一类的具体化实例,每一个类都是具有某些共同特征的对象的抽象。
下面将讲解对象在 C# 语言中的应用。
对象的创建
对象可以认为是从一类事物中抽象出的某一个特例,这个特例可以用来处理这类事物出现的问题。在 C# 语言中,使用 new 关键字来创建对象。之前在讲解构造函数时,介绍过每实例化一个对象就会自动调用一次构造函数,实质上这个过程就是创建对象的过程。
准确地说,可以在 C# 语言中使用 new 关键字调用构造函数创建对象,其语法格式如下:
Test test=new Test(); Test test=new Test("a");参数说明如下:
- Test:类名
- test:创建 Test 类对象
- new:创建对象关键字
- "a":构造函数的参数
每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都有自己的生命周期。当一个对象的生命周期结束时,对象就变成了垃圾,由 .NET 自带的垃圾回收机制处理。
例如,在项目中创建 Plane 类,用于表示飞机类,在该类中创建构造函数并在主方法中创建对象,代码如下:在 C# 语言中,对象和实例本质上是一样的,只是叫法不同,可以通用。
class Plane { public Plane() //构造函数 { Console.WriteLine("飞机信息"); } public static void Main(string[] args)//主方法 { new Plane(); //创建对象 } }在上述代码的 Main 方法中使用了 new 关键字创建 Plane 类的对象,在创建对象的同时,自动调用了构造函数中的代码。
访问对象的属性和行为
当用户使用 new 关键字创建一个对象后,可以使用“对象.类成员名”来获取对象的属性和行为。对象的属性和行为在类中是通过类成员变量和成员方法的形式来体现的,所以当对象获取类成员时,也就相应地获取了对象的属性和行为。例如,创建一个控制台应用程序,在程序中创建一个 Plane 类,用于表示飞机类;在该类中定义一个 X 属性、Y 属性和 ShowInfo 方法;然后在 Program 类中创建 Plane 类的对象,并使用该对象调用其中的属性和方法。代码如下:
class Plane { //飞机的x坐标 public int X { get; set; } //飞机的y坐标 public int Y { get; set; } public void ShowInfo() { Console.WriteLine("飞机的x坐标:" + X); Console.WriteLine("飞机的y坐标:" + Y); } } class Program { static void Main(string[] args) { Plane plane = new Plane();//创建Plane对象 plane.X = 0; //使用对象调用类成员属性 plane.Y = 10; //使用对象调用类成员属性 plane.ShowInfo(); //使用对象调用类成员方法 Console.ReadLine(); } }程序运行结果如下:
飞机的x坐标:0
飞机的y坐标:10
对象的销毁
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存空间将会被回收。在其他语言中需要手动回收废弃对象,但是 C# 拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存空间,垃圾回收器将自动回收无用、但占用内存空间的资源。
以下两种情况下的对象会被 .NET 垃圾回收器视为垃圾:
1) 如果对象引用超过其作用范围,则这个对象将被视为垃圾,如下图所示。
图 1 对象引用超过其作用范围时将被销毁
2) 将对象设为 null 值,如下图所示。
图 2 对象被设为null值时被将销毁
类与对象的关系
类是一种抽象的数据类型,但是其抽象的程度可能不同,而对象是一个类的实例。例如,现在我国正在推行分类垃圾处理,我们可以把大的“垃圾”作为一个分类,而具体的垃圾分类(如“可回收垃圾”“不可回收垃圾”“厨余垃圾”和“有害垃圾”等)就可以作为具体的对象。
当然,我们说类是有层次结构的,也就是类在一个整体的层次结构中,既可以作为子类,也可以作为其他类的父类。例如这里提到的具体垃圾分类还可以作为其他具体对象的父类,如可以将有害垃圾作为一个父类,而将有害垃圾中的电池作为对象,以此类推。
又如,我们可以把水果看作一个类,而具体的水果,如葡萄、草莓、桃子等,就可以作为水果类的对象。
综上所述,可以看出类与对象的区别是,类是具有相同或相似结构、操作和约束规则的对象组成的集合,而对象是某一类的具体化实例,每一个类都是具有某些共同特征的对象的抽象。