版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计
–C#第九章定义类主要内容类定义相关语法类的定义构造函数与析构函数其它相关主题类的定义使用class关键字来定义类:
class<类名>
{
//类的成员
}
类的成员(Member)的定义成员的访问限定符数据成员(字段)的定义函数成员(方法)的定义构造函数与析构函数的定义属性(方法)的定义类定义中可以使用的访问修饰符修饰符含义无或internal类只能在当前项目中访问public类可以在任何地方访问abstract或internalabstract类只能在当前项目访问,不能实例化,只能继承publicabstract类可以在任何地方访问,不能实例化,只能继承sealed或internalsealed类只能在当前项目中访问,不能派生,只能实例化publicsealed类可以在任何地方访问,不能派生,只能实例化成员访问(Accessibility)限定符public:
Memberisaccessiblefromanycode;private:
Memberisaccessibleonlyfrom
codethatispartoftheclass(thedefaultifnokeywordisused);internal:
Memberisaccessibleonlyfromcodewithintheproject(assembly)whereitisdefined;protected:
Memberaccessibleonlyfromcodethatispartofeithertheclassoraderivedclass;Protectedinternal数据成员(Field)的定义class<类名>
{
<访问限定符><类型><成员名>;
}
其他修饰符:static、readonly、const、
volatileModifierstatic:表示类的静态字段,可通过定义它们的类来访问,不能用对象实例访问。readOnly:表示这个字段只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值。ModifierConst:指定字段或局部变量的值是常数,不能被修改Volatile:类型修饰符(typespecifier),被设计用来修饰被不同线程访问和修改的变量;数据成员(Field)的初始化在数据成员的定义语句中进行初始化;运行时初始化(类的新对象被创建时);可用于静态数据成员的初始化方法;在实例构造函数(Constructors)中初始化;(推荐)函数成员(Method)的定义class<类名>
{
<访问限定符><成员函数原型声明>
{函数体}
}其他修饰符Static:只能通过类访问,无法通过对象实例访问;Virtual:方法可以重写Abstract:方法必须在非抽象的派生类中重写(只用于抽象类)override(sealed):方法重写了一个基类方法(如果方法被重写,就必须使用该关键字)Extern:方法定义放在其他地方构造函数与析构函数
(ConstructorsandDestructors)构造函数与析构函数是类的两种特殊的函数成员,分别用于对象的初始化和清理。构造函数要求与所在的类同名,无返回值,如:构造函数与析构函数
(ConstructorsandDestructors)构造函数允许重载,如果在代码中没有提供,编译器会自动添加一个默认的构造函数。而析构函数使用带有~前缀的类名来声明,无参无返回值。如:
析构函数不允许重载。静态构造函数静态构造函数在以下情形下被自动调用:对应类的第一个实例被创建时;对应类的任何一个静态成员第一次被引用时。静态构造函数用于初始化类的静态成员。关于FinalizeFinalize方法允许Object在“垃圾回收”回收Object之前尝试释放资源并执行其他清理操作。默认情况下,Object.Finalize不执行任何操作。只有在必要时才必须由派生类重写它。派生类型中的每个Finalize实现都必须调用其基类型的Finalize实现。这是唯一一种允许应用程序代码调用Finalize的情况。
c#析构函数是执行清理操作的C#机制。析构函数提供了适当的保护措施,如自动调用基类型的析构函数。在C#代码中,不能调用或重写Object.Finalize。类的属性(Property)的定义class<类名>
{
<访问限定符><类型><属性名>
{
get{读取属性值部分函数体}
set{设置属性值部分函数体}
}属性实际上实现了OOP的封装性类的属性(Property)的定义只读/只写属性自动完成属性(C#3.0)类的属性(Property)的定义类的属性(Property)的定义比较OOP与非OOP比较OOP与非OOP类定义中的访问修饰符内部类与公共类在默认情况下,不加修饰符或显式使用internal关键字来定义内部类。内部类只允许被同一个项目中的代码访问。要让其他项目中的代码来访问,必须使用关键字public,即定义为公共类。注意以下代码将不能编译internalclassMyBase
{
//Classmembers.
}
publicclassMyClass:MyBase
{
//Classmembers.
}类的继承-派生类的定义定义派生类的语法结构如下:
class<派生类名>:<基类名>
{
//派生类特有的成员
}C#不支持多重继承,即:
在C#中,一个类至多只能有一个基类。基类成员在派生类中的可访问性在基类中的
可访问性在派生类中的
可访问性private(inaccessible)publicpublicprotectedprotectedprotected关键字protected关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。
注意,只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的。派生类对象的实例化为了实例化派生类,必须首先实例化它的基类部分。以此递推,最先被实例化的应该是System.Object类。从本质上看,要创建派生类的对象,首先应通过调用基类的构造函数完成对由基类继承而来的数据成员的初始化,然后再执行自身的构造函数完成本类扩展成员的初始化。派生类对象的实例化默认情形下,会依次调用以下构造函数1、System.Object.Object()
2、MyBaseClass.MyBaseClass()
3、MyDerivedClass的构造函数
具体调用的重载版本取决于以何种方式来实例化MyDerivedClass(new语句)派生类对象的实例化如果希望被调用的不是基类的默认构造函数(即无参版本),则可以使用构造函数初始化器,它会先于所在的构造函数被执行,格式如下:
publicDerivedClass(paramlist1):base(paramlist2)
{…}其中,base关键字用于指代当前实例对应的基类对象,从而调用基类的对应构造函数。派生类对象的实例化构造函数初始化器还可以使用this关键字,实现在调用指定的构造函数前,先调用其他非默认的构造函数。实际上默认的派生类构造函数等价于:
publicMyDerivedClass():base(){}派生类对象的析构考虑一个当一个派生类对象将要被销毁时,其析构函数的调用顺序?试一试类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 挖淤泥-外运施工方案(3篇)
- 施工方案审核和批准(3篇)
- 月子会所应急预案(3篇)
- 检修作业应急处置预案(3篇)
- 水泥毯的施工方案(3篇)
- 洗衣液全网营销方案(3篇)
- 温泉会馆营销活动方案(3篇)
- 疫情静默应急预案范文(3篇)
- 社工扫地活动策划方案(3篇)
- 粽子推广活动方案策划(3篇)
- 高分子量聚乙烯托辊的参数
- 2025年高考物理复习十六:带电粒子在立体空间中的运动(含解析)
- 2025年重点高中自主招生考试数学试卷试题(含答案详解)
- 国家级紧急医学救援队伍建设规范
- 2024年“湖北工匠杯”全省检验检测行业职业技能大赛(农产品食品检验员)试题库(含答案)
- 7、辽、西夏与北宋的并立
- 电梯井钢结构安装安全技术交底
- 耕地占补平衡用户手册
- 嘘 - 副本【经典绘本】
- 《最重要的事 只有一件》读书笔记PPT模板思维导图下载
- GB/T 20303.1-2016起重机司机室和控制站第1部分:总则
评论
0/150
提交评论