面向对象(一)
一、 概述
面向对象,大家应该非常熟悉这个说法了吧!这个面向对象,那个也是面向对象,但是究竟什么是面向对象呢?这次教程我就把自己的理解说一说!由于C是来自微软的家族,所以在C#中有结构和类,其实它们都是一种模板。
二、 类
1. 数据成员
a) 数据成员包括:字段,常量,事件 。
b) 数据成员可以是静态数据也可以是非静态的。用static进行声明。
c) 常量的声明用const关键字
d) 注意:在JAVA中我们可以称数据成员是属性,而在C#中我们不可以这么说,原因在本文中会讲到。
2. 函数成员
a) 函数成员包括:方法、属性、构造函数、析构函数、索引器等
b) 方法:
i. 方法分为:①实例方法②静态方法
ii. 实例方法用于处理对应的实例化对象。专用!
iii. 静态方法处理所有类的实例化对象。公用!
iv. 方法的声明:访问修饰符 返回类型 方法名(参数列表)
v. 方法的调用: 对象.方法名(参数列表)
vi. 注意:给方法传递参数可以是引用类型或者值类型(值类型和引用类型的区别,在我的博客有详细的介绍)。在C# 中所有的参数都是通过值来传递的。但是也可以强制使值类型参数通过引用来传递!这时候使用关键字ref 。
vii. 无论是值传递还是引用传递,任何变量都必须初始化!!
viii. 方法也可以进行重载,方法的签名有名称,参数个数,参数类型。
方法重载即同名不同参数(参数个数不同或者参数类型不同),这里注意:返回类型不同不一定是方法重载!
c) 属性
i. 不同于JAVA中我们常说的属性。在C#中,属性是:一个方法或者是一对方法。功能(类似于JAVA类中的get和set方法)是用来给类的字段进行设置值和取得类的字段的值。
ii. 语法:SomeProperty就是属性
|
public string SomeProperty { get { return propertyValue; } set { propertyValue = value; } } |
iii. Get访问器不带参数,返回类型必须是属性声明的类型
iv. Set访问器不需要人工传入参数,有一个默认的参数value
v. 如果属性里面只有get,则属性称为只读属性,只有set则属性称为只写属性(基本上不会使用,如果为了某个目的,可以用别的方法替代),如果都有,则称为读写属性。
vi. 属性的访问修饰符
C#中不允许给属性的get和set访问器设置不同的访问修饰符。
vii. 内联: 在C++中有,其实这是环境进行的操作,C#就是由CLR选择的一种降低系统开销的方法。
d) 构造函数
i. 语法:访问修饰符 类名
ii. 构造函数主要用来初始化成员变量,但是也可以执行一些其他的动作。
iii. 如果在定义类时,用户没有显示提供构造函数,编译器会自动添加一个默认的无参构造函数,这个构造函数会把所有的成员变量初始化为标准的默认值。如果用户提供了带参数(如果是无参的,其实没有什么意义)的构造函数,编译器就不会提供默认的构造函数。构造函数同样可以进行重载。
iv. 使用私有(Private)或保护(Protected)构造函数的作用:
①类永远不会被实例化
②通过类的静态方法可以获得类的实例化对象
v. 使用静态构造函数的作用:
①类的一些静态字段或属性,需要在第一次使用类前,进行初始化。
注意:静态构造函数不能带任何参数,一个类只能有一个静态构造函数。在C#中静态构造函数通常在第一次调用类的成员之前执行。
vi. 从其他构造函数中调用构造函数
参看代码实例部分!
e) 析构函数
i. 语法: ~ 类名{}
ii. 作用:用于销毁非托管资源
三、 结构
1. 定义:
Struct 结构名
{
}
2. 与类的区别:
a) 结构是值类型,类是引用类型。
b) 结构不支持继承
c) 结构总是有一个默认的无参构造函数,并且不允许用户替换!
四、 Object类
所有.NET类都是派生于System.Object。结构派生于System.ValueType,进而有间接派生自System.Object。既然所有的类都是派生于System.Object,那么这些类不但可以访问自己定义的方法和属性,也可以访问System.Object定义的许多公共或受保护的成员方法。
浙公网安备 33010602011771号