Welcome 微信登录

首页 / 软件开发 / C#

类的成员

类的成员

类的成员2007-09-22 本站 类的成员可以分为两大类:类本身所声明的,以及从基类中继承而来的。类的成员有以下类型:●成员常量,代表与类相关联的常量值。●域,即类中的变量。●成员方法,复杂执行类中的计算和其它操作。●属性,用于定义类中的值,并对它们进行读写。●事件,用于说明发生了什么事情。●索引指示器,允许象使用数组那样为类添加路径列表。●操作符,定义类中特有的操作。●构造函数和析构函数,分别用于对类的实例进行初始化和销毁。包含有可执行代码的成员被主食...
构造函数

构造函数

构造函数2007-09-22 本站 构造函数用于执行类的实例的初始化。每个类都有构造函数,即使我们没有声明它,编译器也会自动为我们提供一个默认的构造函数。在访问任何一个类的时候,将最先执行构造函数中的语句。实际上,任何构造函数的执行都隐式地调用了系统提供的默认的构造函数base()。如果我们在类中声明了如下的构造函数,C(...){...}它等价于:c(...):base(){...}使用构造函数请注意以下几个问题:●一个类的构造函数通常与类名相同。●构造...
构造函数的参数

构造函数的参数

构造函数的参数2007-09-22 本站 上一小节的例子中,类A同时提供了不带参数和带参数的构造函数。构造函数可以是不带参数的,这样对类的实例的初始化是固定的。有时,我们在对类进行实例化时,需要传递一定的数据,来对其中的各种数据初始化,使得初始化不再是一成不变的,这时,我们可以使用带参数的构造函数,来实现对类的不同实例的不同初始化。在带有参数的构造函数中,类在实例化时必须传递参数,否则该构造函数不被执行。让我们回顾一下10.2节中关于车辆的类的代码示例。我...
析构函数

析构函数

析构函数2007-09-22 本站 在类的实例超出范围时,我们希望确保它所占的存储能被收回。C#中提供了析构函数,用于专门释放被占用的资源。析构函数的名字与类名相同,只是在前面加上了一个符号“~”。析构函数不接受任何参数,也不返回任何值。如果你试图声明其它任何一个以符号“~”开头而不与类名相同的方法,和试图让析构函数返回一个值一样,编译器都会产生一个错误。析构函数不能是继承而来的,也不能显式地调用。当某个类的...
C#方法中的参数

C#方法中的参数

C#方法中的参数2007-09-22 本站 C#中方法的参数有四种类型:●值参数,不含任何修饰符。●引用型参数,以ref修饰符声明。●输出参数,以out修饰符声明。●数组型参数,以params修饰符声明。11.2.1 值参数当利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并且将此拷贝传递给该方法。被调用的方法不传经修改内存中实参的值,所以使用值参数时,可以保证实际值是安全的。在调用方法时,如果形式化参数的类型是值参数的话,调用的实参的值必须保证是正...
C#静态和非静态的方法

C#静态和非静态的方法

C#静态和非静态的方法2007-09-22 本站 C#的类定义中可以包含两种方法:静态和非静态的。使用了static修饰符的方法为静态方法,反之则是非静态的。静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例。非静态方法可以访问类中的任何成员,而静态只能访问类中的静态成员。看这个例子:class A{ int x; static int y; static int F(){x=1; //错误,不允许访问y=2; //正确,允许访问 }在这个类定义中...
C#操作符重载

C#操作符重载

C#操作符重载2007-09-22 本站 11.5.1 问题的提出在面向对象的程序设计中,自己定义一个类,就等于创建了一个新类型。类的实例和变量一样,可以作为参数传递,也可以作为返回类型。在第七章中,我们介绍了系统定义的许多操作符。比如对于两个整型变量,使用算术操作符可以简便地进行算术运算:class A{ public int x; public int y; public int Plus{return x+y;}}再比如,我们希望将属于不同类的两个实...
C#的静态域和非静态域

C#的静态域和非静态域

C#的静态域和非静态域2007-09-23 本站 静态域的声明是使用static修饰符,其它的域都是非静态域。静态域和非静态域分别属于C#中静态变量和非静态变量。若将一个域说明为静态的,无论建立多少个该类的实例,内存中只存在一个静态数据的拷贝。当这个类的第一个实例建立时,域被初始化。以后再进行类的实例化时,不再对其进行初始化,所有属于这个类的实例共享一个副本。与之相反,非静态域在类的每次实例化时,每个实例都拥有一份单独的拷贝。下面的例子清楚地反映了二者之间...
C#的只读域

C#的只读域

C#的只读域2007-09-23 本站 域的声明中如果加上了readonly修饰符,表明该域为只读域。对于只读域我们只能在域的定义中和它所属的构造函数中进行修改,在其它情况下,域是“只读”的。熟悉c和C++的程序员可能习惯了使用const和#define定义一些容易记住的名字来表示某个数值。static和readonly修饰符可以起到同样的效果:public class A{public static readonly double...
C#域的初始化

C#域的初始化

C#域的初始化2007-09-23 本站 注意:在C和C++中,未经初始化的变量是不能使用的。在C#中,将为每个未经初始化的变量提供一个默认值。这虽然中某种程序中保证了程序的安全性,但对本应初始化为某个特殊值的变量忘记了初始化,也常常会导致程序的执行误入岐途。对于静态变量、非静态的对象变量和数组变量,这些变量自动初始化为本身的默认值。对于所有引用类型的变量,默认值为null。所有值类型的变量的默认值见下表所示:表12-1 部分类型的域初始化的值变量类型默认...
C#中的属性

C#中的属性

C#中的属性2007-09-24 本站 属性是对现实世界中实体特征的抽象,它提供了对类或对象性质的访问。比如,一个用户的姓名、一个文件的大小、一个窗口的标题,都可以作为属性。类的属性所描述的是状态的信息,在类的某个实例中属性的值表示该对象的状态值。C#中的属性更充分地体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问。它借助于get和set对属性的值进行读写,这在C++中是需要程序员手工完成的一项工作。12.2.1 C#属性的声明C#的属性...
事件访问器

事件访问器

事件访问器2007-09-24 本站 如Button的例子所示,大多数情况下事件的声明都省略了事件访问声明。什么情况下使用事件访问声明呢?答案是:如果每个事件的存储开销太大,我们就可以在类中包含事件访问声明,按私有成员的规则存入事件句柄列表。访问器的声明包括两种:添加访问器声明(add-accessor-declaration)和删除访问器声明(remove-accessor-declaration)。访问器声明之后跟随相关执行代码的语句块。在添加访问器声...
<< 1 2 3 4 5 6 7 8 9 10 >>