类的定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类、命名空间的定义与使用
1.类
1.1类的声明及其修饰符
类(class)是最基础的C#类型。类是一个数据结构,将状态(字段)和操作(方法和其他函数成员)组合在一个单元中。
class Car//定义Car类class是保留字,表示定义一个类,Car 是类名 {
public string model;
public void Run()
{
Console.WriteLine("{0}跑起来!!", model);
}
}
类的声明格式如下:
类修饰符class 类名
{
类体
}
其中,关键字class、类名和类体是必须的,其它项是可选项。
类修饰符包括new、public、protected、internal、private、abstract 和sealed。类体用于定义类的成员。
下面介绍几个常用的类的修饰符。
(1)new:仅允许在嵌套类声明时使用,表明类中隐藏了由基类中继承而来的、与基类中同名的成员。
(2)public:表示不限制对该类的访问。
(3)protected:表示只能从其所在类和所在类的子类进行访问。
(4)internal:只有其所在类才能访问。
(5)private:只有.NET中的应用程序或库才能访问。
(6)abstract:抽象类,不允许建立类的实例。
(7)sealed:密封类,不允许被继承。
类的成员可以分为两大类:类本身所声明的以及从基类中继承来的。
类的成员包括以下类型:
字段:即类中的变量或常量,包括静态字段、实例字段、常量和只读字段。
方法:包括静态方法和实例方法。
属性:按属性指定的get方法和Set方法对字段进行读写。属性本质上是方法。
事件:代表事件本身,同时联系事件和事件处理函数。
索引指示器:允许象使用数组那样访问类中的数据成员。
操作符重载:采用重载操作符的方法定义类中特有的操作。
构造函数和析构函数。
1.2 对象
对象是类的实例,是OOP应用程序的一个组成部件。这个组成部件封装了部分应用程序,这部分应用程序可以是一个过程、一些数据
或一些更抽象的实体。
对象包含变量成员和函数类型。它所包含的变量组成了存储在对象中的数据,其中包含的方法可以具有访问对象的功能。复杂的对象可以不包含任何数据,只包含方法,表示一个过程。
在C#中和.NET Framework中的所有类型都是对象。变量类型是一个类,变量也是一个对象。
下面的代码实现了访问Car类的对象和对象数据状态:
public class Car
{
public int number;
public string color;
private string _brand;
public Car()
{
}
public string brand
{
get
{
return _brand;
}
set
{
_brand = value;
}
}
}
下面代码在一个方法中实例化类对象并设置和访问数据状态:private void button2_Click(object sender, EventArgs e)
{
string pa;
Car c = new Car();
c.brand = "奔驰";
c.color = "黑色";
pa = c.brand;
}
1.3 字段、属性、方法
类的字段准确地说应该是类的数据成员,其定义是:用于存储类和类的实例相关数据的变量。
方法就是类的函数成员,是一个为实现类的某一个特定功能的函数。因此也称为类的方法。
属性是一个代表类的实例或类中的一个数据项的函数成员。从定义可以看出,属性是类的一个函数成员或者说是方法。对类的属性的设定和获取可以用两个访问器set和get来实现。
字段,方法和属性的定义的区别如下示例:
class MyClass //定义类MyClass
{
//数据成员或者字段的定义
public int aa= 10;
private int bb;
//属性的定义
public int MyValue
{
set //设定属性
{
bb= value;
}
get //从属性获取值
{
return bb;
}
}
//方法的定义
public void SetValue()
{
}
}
从概念上可以区分字段和属性的区别,字段是一个用于存储数据的变量,属性是一个方法或者说是一个函数成员。
1.4 构造函数和析构函数
构造函数和析构函数是类中比较特殊的两种成员函数,主要用来对对象进行初始化和回收对象资源。一般来说,对象的生命周期是从构造函数开始,以析构函数结束。如果一个类含有构造函数,在实例化该类的对象时就会调用构造函数;如果含有析构函数则会在销毁对
象时调用它。构造函数的名字和类名相同。析构函数和构造函数的名字相同,但析构函数要在名字前加一个波浪号(~)。当推出含有该对象的成员时,析构函数将自动释放这个对象所占用的内存空间。
每个类都有构造函数,在访问一个类的方法、属性或任何其他东西之前,首先执行的语句应是与类相应的构造函数。即使没有声明它,编译器也会自动构造一系列的构造函数。构造函数不声明返回类型,而且一般都是public类型,如果是private表明该类不能被实例化,这通常只用于静态成员的类。
析构函数是以类名加“~”来命名的。.NET系统有垃圾回收功能,当某个类的实例被认为不再有效,并符合析构条件时,.NET的垃圾回收功能就会调用该类的析构函数。
下面的代码实现了Car类析构函数的声明:
public class Car
{
public int number;
public string color;
private string _brand;
public Car()//构造函数
{
}
public~Car()//析构函数
{
}
public string brand
{
get
{
return _brand;
}
set
{