第4章 面向对象程序设计入门

第4章 面向对象程序设计入门

4.1 面向对象的基本概念

4.1.1 对象

对象 = 属性 + 行为(方法、操作)

4.1.2 事件与方法

事件: 又称消息,表示一个对象向另一个对象发出的服务请求。
方法:百事一个对象能完成的服务或执行的操作功能。

在面向对象中的系统就是依靠时间来驱动其运转的,新的事件一旦发生,系统中的相关对象的操作开始执行,结果是系统的状态就会发生改变。

4.1.3 类与对象

4.1.4 抽象、封装、继承与多态

abstraction, encapsulation and information hiding, ,polymorphism

多态性是指在基类中定义的数学或方法被派生类继承后,可以表现出不同的行为特征,对同一消息会做出不同的响应。

为了实现多态性,通常需要在派生类中更改从基类中继承来的方法。这种未来替换积累的部分内容而在派生类中重新定义的方法,称为覆盖。这样一来,不同的对象可以响应同名的消息(方法)来完成特定的功能,带其具体的实现却可以不同。


4.2 类的定义与使用

4.2.1 类的声明和实例化

  1. 类的声明
  2. 类的实例

4.2.2 类的可访问性

声明含义
public
internal只允许当前程序集内部使用
protected只允许该类及其派生类使用
private
protected internal结合之

命名空间不允许使用访问修饰符。

4.2.3 值类型与引用类型

  1. 值类型

  2. 引用类型

  3. 装箱和拆箱

引用类型也允许类型转换

装箱[隐式转换]

int i = 100;
object x = i;

拆箱[必须是显式转换]

int i = 100;
int k= (int)x;

4.3 类的成员及其定义

数据成员其他
常量,字段,属性方法,构造函数,索引器,事件

4.3.1 类的常量与字段成员

  1. 常量

符号变量,编译时即可确定值

public const double pi = 3.14;
  1. 字段
    字段表示累的成员变量,字段的值代表一个对象的数据状态。 换一种新说法而已

*需要注意:*
1. 字段通过readonly关键字可设置为只读。
2. 只读字段运行时确定值;

常量和字段描述了类的数据信息

4.3.2 类的属性成员

限制对字段的读写操作,或验证数据的正确性和一致性。

get, set 访问器

public double R 
{
    get{return r;}

    set{
        if(value <= 0)
            r = 0;
        else
        r = value;
    }
}

4.3.3 类的方法成员

  1. 方法的声明

修饰符包括 publicprotectedprivateinternal

  1. 方法的调用

    • 同一类中直接调用方法
    • 在类外部通过实例调用,静态方法通过类名调用

4.3.4 类的构造函数

默认构造函数
不包含任何参数和语句的构造函数,系统为数据成员初始化为各自的默认值

但C#允许重新定义默认构造函数


4.4 方法的参数传递

4.4.1 按值传参

注意
string 和 object 虽然是引用型数据,但是从表现形式上来看,其具有按值传参的效果。

4.4.2 按引用传参

当值类型和 string 类型参数要按引用传参是,可以通过 ref 关键字来声明引用参数,无论是形参还是实参,只要希望传递数据的引用,就必须田间 ref 关键字。

// 声明
public string Swap(ref int x, ref int y)

// 调用
x.Swap(ref a, ref b)

4.4.3 输出参数

定义
输出参数不需要对实参进行初始化,它专门用于把方法中的数据通过形参返回给实参,但不会将实参的值传递给形参。
// 声明
public void SplitPath(string path, out string dir, out string filename)

// 调用
string dir, file;
a.Split(path, out dir, out file)

通过out关键字声输出参数

总结
ref, out 声明时需要有类型标识,调用时只需要变量名就可以了。它们都是针对普通变量。

4.4.4 引用类型的参数

引用类型参数总是按引用传递的,所以引用类型参数传递不需要使用refout关键字(string 除外)。引用类型参数的传递,实际上是将实参变量对数据的引用复制给了形参变量,所以形参变量与实参变量共同指向同一个内存区域。

4.4.5 数组型参数

数组也是引用类型参数,把数组作为参数传递时,也是引用传参。但把数组作为参数,有两种使用方式:一种是在形参数组前不添加params修饰符,另一种是在形参数组前添加params修饰符。不添加params修饰符时,所对应的实参必须是一个数组名。添加params修饰符时,所对应的实参可以是数组名,也可以是数组元素值得列表,此时,系统将自动把各种元素值组织到形参数组中。

// 声明
int Max(int[] a)
{
}

// 调用 
int n = Max(x);
// 声明 
int Max2(params int[] a)
{
}

// 调用 
int n = Max2(1, 2, 3, 4, 5);

4.5 方法的重载

4.5.1 方法的重载

4.5.2 构造函数的重载

public Student(string name):this(name, 20);

4.6 对象的生命周期

4.6.1 对象的生命周期

  1. 使用new运算符创建对象并要求获得内存;
  2. 自动调用构造函数完成对对象的初始化;
  3. 使用对象;
  4. 释放对象所占用的资源,如关闭磁盘文件、网络连接和数据库服务器;
  5. 释放对象回收内存(由垃圾回收器完成)。

4.6.2 析构函数

~fun()
{

}

无法继承或重载析构函数!

不推荐使用,性能较差。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值