C#学习笔记(六)——面向对象编程简介

一、面向对象编程的含义

*   是一种模块化编程方法,使代码的重用性大大的增加。

*   oop技术使得项目的设计阶段需要的精力大大的增加,但是一旦对某种类型的数据表达方式达成一致,这种表达方式就可以沿用下去,直到这款应用的生命周期结束。

(一)对象的含义

1、对象就是OPP应用程序的一个组成部分,这个组成部件封装了部分应用程序,这部分程序可以是一个过程、一些数据或一些更抽象的实体。对象的类型在OOP中有个特殊的名称叫做类。可以使用类来定义一个对象。

PS:术语“类”和“对象”常常被混淆,但简单的来讲就是,类是模板,而对象是模板做出来的产品

(我们将使用统一的建模语言UML语法来研究类和对象)

比如说Printer和MyPrinter来用UML区别一下类和对象

2、属性和字段

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

(2)属性和字段是不同的,因为属性不提供对数据的直接访问。

(3)UML图

a、可访问性:+号表示公共成员,-号表示私有成员。

b、成员名

c、成员的类型

2、方法

(1)UML图

a、其语法类似于字段和属性,但最后显示的类型是返回类型,在这一部风汇总还显示了方法的参数。

b、in、out和inout他们用于表示数据流的方向,其中out和inout大致对应与学习笔记(五)中讨论的C#关键字out和ref。in 大致对应于C#中不适用这两个关键字的情景。

3、一切皆对象

4、对象的生命周期

(1)两个重要的阶段:

a、构造阶段:对象最初进行实例化的时期。这个初始化过程称为构造阶段,由构造函数完成。

b、析构函数:在删除一个对象时,常常需要执行一些清理工作,例如释放内存,这由析构函数来完成。

(2)构造函数:

          对象的初始化工程是自动完成的,但是,在初始化对象的过程中,需要初始化对象储存的数据。构造函数就是用于初始化数据的函数。

          所有的类有包括一个以上的构造函数,在这些函数中:有一个默认的构造函数,该函数没有参数,名字和类名一样。类可能还包括几个带参数的构造函数,称为非默认的构造函数。代码可以使它们以许多的方式实例化对象。

          在C#中,用new关键字来调用构造函数。

          构造函数与字段和属性一样,可以是共有或私有的。在类外部的外码不能使用私有构造函数来实例化对象,而必须使用公共的构造函数。

(3)析构函数

           不应该依赖析构函数来书房对象实例所使用的函数,因为在不再使用某个对象后,该资源会长时间被该对象占用。如果所使用的资源非常重要,这样做就有可能出问题。(后面的会有解决的办法)。

4、静态和实例类函数

(1)类还有静态成员,静态成员可以在类的实例之中共享,在使用静态成员的时候甚至不需要实例化对象。

         UML图表示法:

在UML图中,类的静态成员用下划线表示。

(2)静态构造函数

         使用类中的静态成员时,需要预先初始化这些成员。使用静态构造函数可以执行这种初始化任务,一个雷只能有一个静态构造函数,但是构造函数不能带有访问修饰符,也不能带任何参数。

         静态构造函数不能直接调用,只能在下述情况中执行:

       a、创建包含静态构造函数的类实例时

       b、访问含静态构造函数的类的静态成员时

(3)静态类

         如果我们想类只含有静态成员,一种简单的方法就是使用静态类,而不是把类的构造函数设置为私有,静态类只能包含静态成员。

时间: 2024-08-21 23:15:50

C#学习笔记(六)——面向对象编程简介的相关文章

python学习笔记(六) - 面向对象编程

一. 类和实例 aa 二. 访问限制 bb 三. 继承和多态 cc 四. 获取对象信息 dd

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer学习笔记32_面向对象编程(3)--继承(三):多重继承、虚继承与虚基类

C++ Primer学习笔记32_面向对象编程(3)--继承(三):多重继承.虚继承与虚基类 一.多重继承 在C++语言中,一个派生类可以从一个基类派生,称为单继承:也可以从多个基类派生,称为多继承. 多重继承--一个派生类可以有多个基类 class <派生类名> : <继承方式1> <基类名1>,<继承方式2> <基类名2>,... { <派生类新定义成员> }; 可见,多继承与单继承的区别从定义格式上看,主要是多继承的基类多于一个

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g

C++ Primer 学习笔记_66_面向对象编程 --定义基类和派生类[续]

算法旨在用尽可能简单的思路解决问题,理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时不妨从例子入手,通过一个简单的例子,并编程实现,这个过程其实就可以理解清楚算法里的最重要的思想,之后扩展,对算法的引理或者更复杂的情况,对算法进行改进.最后,再考虑时间和空间复杂度的问题. 了解这个算法是源于在Network Alignment问题中,图论算法用得比较多,而对于alignment,特别是pairwise alignment, 又经常遇到maxim

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数.抽象类.虚析构函数.动态创建对象 一.纯虚函数 1.虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 2.如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 3.在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 4.定义纯虚函数: class <类名> { virtual <类型> <函

C++ Primer 学习笔记_65_面向对象编程 --概述、定义基类和派生类

面向对象编程 --概述.定义基类和派生类 引言: 面向对象编程基于的三个基本概念:数据抽象.继承和动态绑定. 在C++中,用类进行数据抽象,用类派生从一个类继承另一个:派生类继承基类的成员.动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数. 继承和动态绑定在两个方面简化了我们的程序:[继承]能够容易地定义与其他类相似但又不相同的新类,[派生]能够更容易地编写忽略这些相似类型之间区别的程序. 面向对象编程:概述 面向对象编程的关键思想是多态性(polymorphism)

C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对象进行的调用的虚行为. 1.比較两个Sales_item对象 在编写函数计算销售总数之前,须要定义比較Sales_item对象的方法.要用Sales_item作为关联容器的keyword,必须能够比較它们.关联容器默认使用keyword类型的小于操作符,可是假设给Sales_item定义小于操作符,

C++ Primer 学习笔记33_面向对象编程(4)--虚函数与多态(一):多态、派生类重定义、虚函数的访问、 . 和-&gt;的区别、虚析构函数、object slicing与虚函数

C++ Primer学习笔记33_面向对象编程(4)--虚函数与多态(一):多态.派生类重定义.虚函数的访问. . 和->的区别.虚析构函数.object slicing与虚函数 一.多态 多态可以简单地概括为"一个接口,多种方法",前面讲过的重载就是一种简单的多态,一个函数名(调用接口)对应着几个不同的函数原型(方法). 更通俗的说,多态行是指同一个操作作用于不同的对象就会产生不同的响应.或者说,多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态行分

C++ Primer 学习笔记_67_面向对象编程 --转换与继承、复制控制与继承

面向对象编程 --转换与继承.复制控制与继承 I.转换与继承 引言: 由于每一个派生类对象都包括一个基类部分,因此能够像使用基类对象一样在派生类对象上执行操作. 对于指针/引用,能够将派生类对象的指针/引用转换为基类子对象的指针/引用. 基类类型对象既能够作为独立对象存在,也能够作为派生类对象的一部分而存在,因此,一个基类对象可能是也可能不是一个派生类对象的部分,因此,没有从基类引用(或基类指针)到派生类引用(或派生类指针)的(自己主动)转换. 关于对象类型,尽管一般能够使用派生类型的对象对基类