第八章 C#面向对象编程(Object-Oriented Programming,OOP)简介

.NET OOP

一、面向对象编程的含义

1.函数(过程化)编程常常导致单一的应用程序,即所有的功能都包含在几个代码模块中(常常是一个代码模块)

而使用OOP技术,常常使用许多代码模块,每个模块提供特定的功能,每个模块都是孤立的,甚至与其他模块完全孤立。这种模块化编程方法提供了非常大的多样性,打打增加了重用代码的机会。

(把更多的精力放在项目的设计阶段)

2.对象是从类型中创建的,对象的类型叫类。可以用类的定义实例化对象。类相当于汽车的模板或者用于构建汽车的规划,汽车本身是这些规划的实例,可以看做对象。

3.(1)可以通过属性和字段访问对象中包含的数据。这个对象数据可以用于区分不同的对象,因为同一个类的不同对象在属性和字段中存储了不同的值。

(2)属性不提供对数据的直接访问(可以更好地控制各种行为)      如果是字段,字段的取值范围仅由存储改该信息的类型来限制。

(3)可访问性:通常把字段设置为私有,通过公共属性访问他们,这样类中的代码就可以直接访问存储在字段中的数据,而公共属性禁止外部用户访问这些数据,以防他们在其中放置无效内容。

4.方法(对象中的函数)

方法参数带标识符in(不使用out和inout的情形).out(out).inout(ref)

5.一切皆对象

对象的生命周期(正在使用,构造阶段,析构阶段)

(1)(实例)构造函数:用new关键字调用。cupOfCoffee myCup = new cupOfCoffee();()中可填写参数

(2)析构函数:清理对象

6.静态和实力类成员(尚未理解)

(1)静态构造函数

(2)静态类

二、OOP技术

1.接口:把公共实例(非静态)方法和属性组合起来,以封装特定集合的一个功能。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。接口名称一般以I开头

把接口看做类的创建者和使用者之间的契约。。。

2.可删除的对象:

IDisposable接口。支持IDisposable接口的对象必须实现其Dispose()方法,即他们必须提供这个方法的代码。但不再需要某个对象是,调用方法释放重要资源。

using关键字可以在代码块中初始化使用重要资源的对象。会在代码块末尾自动调用Dispose()方法

<ClassName> <VariableName> = new <ClassName>();

...

using(<VariableName>)

{

...

}

或者

using(<ClassName> <VariableName> = new <ClassName>());

{

...

}

3.继承

被继承(派生)的类也成为父类(基类)                 C#中的对象仅能直接派生与一个基类

继承性可以从一个较一般的基类扩展或创建更多的特定类。

比如,一个代表农场家畜的类Animal,拥有EatFood()或Breed()等方法,我们可以创建一个派生类Cow,支持所有的这些方法,它也有自己的方法,入Moo()和SupplyMilk()。还可以创建另一个派生类Chicken,该类有Cluck()和LayEgg()方法。

派生类不能访问基类的私有成员,但可以访问公共成员。

第三种可访问性protected,只有派生类才能访问protected成员

外部成员不能访问protected和private成员

基类的成员可以是虚拟的,成员可以由继承它的类重写。   虚拟成员不能是私有成员

基类可以定义为抽象类。抽象类不能直接实例化。要使用抽象类,必须继承这个类,抽象类可以有抽象成员,这些成员在基类中没有实现代码,这些实现代码必须在派生类中提供。

所有对象都有一个共同的基类object。

4.多态性

8.2.3 多态性
继承的一个结构是派生于基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法
处理从同一个基类实例化的对象。例如,如果基类Animal 有一个EatFood()方法,则从派生于它的
类Cow 和Chicken 中调用这个方法,其语法是类似的:
Cow myCow = new Cow();
Chicken myChicken = new Chicken();
myCow.EatFood();
myChicken.EatFood();
多态性则更推进了一步。可以把某个派生类型的变量赋给基本类型的变量,例如:
Animal myAnimal = myCow;
不需要进行强制类型转换,就可以通过这个变量调用基类的方法:
myAnimal.EatFood();
结果是调用派生类中的EatFood()的实现代码。注意,不能以相同的方式调用派生类上定义的方
法,下面的代码不能运行:
myAnimal.Moo();
但是,可以把基本类型的变量转换为派生类变量,调用派生类的方法,如下所示:
Cow myNewCow = (Cow)myAnimal;
myNewCow.Moo();

(从一个派生类中实例化的所有对象都可以看作是其父类的实例)

5.接口的多态性

尽管不能像对象那样实例化接口,但可以建立接口类型的变量,然后就可以在支持该接口的对
象上,使用这个变量访问该接口提供的方法和属性。
例如,假定不使用基类Animal 提供EatFood()方法,而是把该方法放在IConsume 接口上。Cow
和Chicken 类也支持这个接口,唯一的区别是它们必须提供EatFood()方法的实现代码(因为接口不包
含实现代码),接着就可以使用下述代码访问该方法了:

Cow myCow = new Cow();
Chicken myChicken = new Chicken();
IConsume consumeInterface;
consumeInterface = myCow;
consumeInterface.EatFood();
consumeInterface = myChicken;
consumeInterface.EatFood();
这就提供了以相同方式访问多个对象的简单方式,且不依赖于一个公共的基类。例如,这个接
口可以由派生于Vegetable 的VenusFlyTrap 类实现,而不是由Animal 实现:
VenusFlyTrap myVenusFlyTrap = new VenusFlyTrap();
IConsume consumeInterface;
consumeInterface = myVenusFlyTrap;
consumeInterface.EatFood();
在这段代码中,调用consumeInterface.EatFood()的结果是调用Cow、Chicken 或VenusFlyTrap
类的EatFood()方法,这取决于哪个实例被赋予了接口类型的变量。
注意,派生类会继承其基类支持的接口。在上面的第一个示例中,要么是Animal 支持IConsume,
要么是Cow 和Chicken 支持IConsume。有共同基类的类不一定有共同的接口,反之亦然。

6.对象之间的关系(包含,集合)

? 包含关系:一个类包含另一个类。这类似于世承关系,但包含类可以控制对被包含类的成
员的访问,甚至在使用被包含类的成员前进行其他处理。
? 集合关系:一个类用作另一个类的多个实例的容器。这类似于对象数组,但集合有其他功
能,包括索引、排序和重新设置大小等。

7.运算符重载

为重载运算符编写代码,这段代码用作类定义的一部分,而该运算符作用于这个类

8.事件

使用事件可以创建事件驱动的应用程序

9.引用类型和值类型

在 C#中,数据根据变量的类型以两种方式中的一种存储在一个变量中。变量的类型分为两种:
引用类型和值类型,其区别如下:

? 值类型在内存的一个地方存储它们自己和它们的内容。
? 引用类型存储指向内存中其他某个位置(称为堆)的引用,而在另一个位置存储内容。

实际上,在使用C#时,不必过多地考虑这个问题。到目前为止,所使用的string 变量(这是引用
类型)与使用其他简单变量(大多数是值类型,例如int)的方式完全相同。
值类型和引用类型的一个主要区别是,值类型总是包含一个值,而引用类型可以是null,表示
它们不包含值。但是,可以使用可空类型(这是泛型的一种形式)创建一个值类型,使值类型在这个
方面的行为方式类似于引用类型(即可以为null)。这是一个高级论题,详见第12 章。
只有string 和object 简单类型是引用类型,但数组也是隐式的引用类型。我们创建的每个类都
是引用类型,这就是在这里说明这一点的原因。
结构类型和类的重要区别是,结构类型是值类型。

8.3 Windows应用程序中的OOP
第2 章介绍了如何在C#中创建简单的Windows 应用程序。Windows 应用程序非常依赖OOP 技
术,本节将论述OOP 技术,说明本章的一些论点。下面通过一个简单示例加以说明。
试一试:适用对象
(1) 在C:\BegVCSharp\Chapter08 目录中创建一个新的Windows 应用程序Ch08Ex01。
(2) 使用“工具箱”(Toolbox)添加个新的按钮控件,使之位于Form1 的中央,如图8-12 所示。
(3) 双击按钮,为鼠标单击事件添加代码,修改代码,如下所示:

private void button1_Click(object sender, EventArgs e)
{
((Button)sender).Text = "Clicked!";
Button newButton = new Button();
newButton.Text = "New Button!";
newButton.Click += new EventHandler(newButton_Click);
Controls.Add(newButton);
}
private void newButton_Click(object sender, System.EventArgs e)
{
((Button)sender).Text = "Clicked!!";
}
}

时间: 2024-11-07 17:50:20

第八章 C#面向对象编程(Object-Oriented Programming,OOP)简介的相关文章

面向对象编程(Object Oriented Programming,OOP)

类是一个通用的概念,Java.C++.C#.PHP等很多编程语言中都有类,都可以通过类创建对象.可以将类看做是结构体的升级版,C语言的晚辈们看到了C语言的不足,尝试加以改善,继承了结构体的思想,并进行了升级,让程序员在开发或扩展大中型项目时更加容易. 因为Java.C++等语言都支持类和对象,所以使用这些语言编写程序也被称为面向对象编程,这些语言也被称为面向对象的编程语言.C语言因为不支持类和对象的概念,被称为面向过程的编程语言. 实际上,面向对象只是面向过程的升级. 在C语言中,可以将完成某个

面向对象编程Object Oriented Programming(OOP)

把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度. 一:封装(类内的事) 假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的

Java Object Oriented Programming concepts

Introduction This tutorial will help you to understand about Java OOP'S concepts with examples. Let's discuss about what are the features of Object Oriented Programming. Writing object-oriented programs involves creating classes, creating objects fro

Object Oriented Programming python

new concepts of the object oriented programming : class encapsulation inheritance polymorphism the three features of an object are : identity, state and behaviora class is an abstraction which regroup objects who have the same attributes and the same

javaScript设计模式之面向对象编程(object-oriented programming,OOP)(一)

面试的时候,总会被问到,你对javascript面向对象的理解? 面向对象编程(object-oriented programming,OOP)是一种程序设计范型.它讲对象作为程序的设计基本单元,讲程序和数据封装其中,以提高程序的重用性.灵活性和扩展性. 一.举个例子 有这么一个需求:做一个验证表单功能,仅需要验证用户名,邮箱,密码等 觉得在项目产品开发中,自己是这么写的 function checkName(){ //验证姓名 } function checkEmail(){ //验证邮箱 }

CSE210 Advanced Object Oriented Programming

CSE210 Advanced Object Oriented ProgrammingCoursework 2019 Release date: 11th, Mar, 2019Deadline: 12:00PM, 23rd, Apr, 2019 1. DescriptionThe objective of the coursework is to develop a practical application for data processing, analysis and content s

MQF Object Oriented Programming

MQF Object Oriented Programming I Fall 2019Hw2 Due 10/1/2019 before midnightSpecificationsRutgers parking garage management system is required to take care Rutgers University Paringneeds. The system can keep track of all the cars parked in your garag

CSC72002 Object Oriented Programming

CSC72002 Object Oriented Programming - Assignment 2Weight: 40% of your final markSpecificationsYour task is to complete various exercises in NetBeans, using the Java language, and to submitthese via the MySCU link created for this purpose.Marking cri

what&#39;s the problem of Object oriented programming

The problem came from the Object itselft.It can divided into two aspect: 1.Everything is an Object: that's not true,lots of so called object is  not object ,it's just a Wrapper.You dont know what it is  ,but you just need one to let  things go on. Sa