C#的结构和类

类和结构是.NET Framework中的同样类型系统的两种基本构造。两者在本质上都属于数据结构,封装这一组整体作为一个逻辑单位的数据和行为。数据和行为是该类或结构的“成员”,它们包含着各自的方法,属性和事件等。

结构

结构是C#程序员用来定义自己的值类型的最普遍的机制。结构比枚举更强大,因为它提供方法,字段,操作符和访问控制等。

结构与类很相似,都表示可以包含数据成员和函数成员的数据结构。但是,与类不同,结构是一种值类型,并且不需要堆分配。结构类型的变量直接包含了该结构的数据,而类类型的变量所包含的只是对相应数据的一个引用(被引用的数据称为“对象”)。

结构对于具有值语义的小型数据结构尤为有用。复数,坐标系中的点或字典中的“键-值”对都是结构的典型示例。这些数据结构的关键之处在于:他们只是少量数据成员,不要求使用继承或引用标识,而且它们使用较方便(赋值时直接复制值而不是复制它的引用)。

结构的声明通过关键字struct来实现,声明格式为:

修饰符  struct  结构名

{

结构主体

};

结构声明包含一组可选额特性,后跟一组可选的结构修饰符,再跟关键字struct和一个用于命名结构的标识符,然后跟一个可选的结构接口规范,最后跟一个结构主体,根据需要后面还可以跟一个分号。

结构声明可以根据需要包含一个结构修饰符:new,public,protected,internal,private

结构的使用

为结构定义默认(无参数)构造函数是错误的,在结构体重初始化实例字段也是错误的。初始化结构成员可通过两种形式来完成:一是使用参数化构造函数,二是在声明结构后分别访问成员。对于任何私有成员或以其他方式设置为不可访问的成员,只能在构造函数中进行初始化。

如果使用new运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同的是,结构的实例化可以不使用new运算符。在此情况下不存在构造函数的调用,因而可以提高分配效率。但是,在初始化所有字段之前,字段将保持未赋值状态且对象不可用。

当结构包含引用类型作为成员时,必须显式调用调用该成员的默认构造函数,否则该成员将保持未赋值状态且该结构不可用。

例题,创建一个结构,分析结构的使用

类是一种数据结构,它可以封装数据成员(常量和字段),函数成员(方法,属性,事件,索引器,运算符,实例构造函数,静态构造函数和析构函数)和其他的类(嵌套类型)。类是创建对象的模板。C#的一切类型都是类,所有的语句都必须位于类内,不存在任何处于类外的语句。因此,类是C#语言的核心和基本构成模块。类类型支持继承,继承是一种机制,可使派生类对基类进行扩展和专用化。

类声明中指定的基类可以是构造类类型。基类本身不能是类型形参,但在其作用域中可以包含类型形参。

在OOP方法中,类是对现实世界的一种高度抽象与概括,而对象则是类的一个实例,对象一定具有其属类的共同特征与行为规则,当然一个对象还可以具有其属类未曾规定的特征和行为规则。这一点和现实生活是相同的,这样的模拟和抽象比较符合人们的思维习惯,这也正是OOP方法具有强大生命力,能够获得越来越多的软件工作者欢迎并得到众多计算机开发商支持的一个基本原因。

总之,从程序设计者的角度观察,类是一个数据模式和若干个程序过程,经封装而形成的一个整体,是使用信息技术对现实世界的一种模拟与抽象。而对象则是类的一个实例,从程序设计语言来说,对象可以被理解为一个类赋值的结果。对象是OOP方法中组成程序的一种构件。

C#中类的声明是通过class关键字实例的,格式为:

修饰符  class 类名: 基类或接口

{

类体

}

其中“修饰符”,": 基类或接口"为可选项。类的修饰符可以是以下几种之一或者它们的组合(在类的声明()中同一修饰符不允许出现多次)。

(1)new:仅允许在嵌套类声明时使用,表明类中隐藏了由基类中继承而来的,与基类中同名的成员

(2)public:表示不限制对该类的访问

(3)internal:只有其所在类才能访问

(4)private:只有对.NET中的应用程序或库才能访问

(5)abstract:抽象类,不允许建立类的实例

(6)sealed:密封类,不允许被继承

类的继承声明:C#语言中只支持单继承

(1)、构造函数和析构函数

C#提供了更好的机制来增强程序的安全性。C#编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题。但是,程序通过了编译检查并不表示错误已经不存在了。

C#语言充分考虑了程序错误的出现并很好的予以解决,即把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数自动执行。

构造函数的名字不能随便起,必须让编译器认得出才可以被自动执行。它的命名方法既简单又合理:让构造函数与类名相同。除了名字之外,构造函数的另一个特别之处是没有返回值类型,这是与返回值类型为void的函数不同。

析构函数是实现销毁一个类的实例的方法成员。析构函数不能有参数,不能有任何修饰符而且不能被调用。析构函数与构造函数目的不同,特在析构函数前加前缀”~“以示区别。

构造函数和析构函数虽然是一个类中形式上较简单的函数。但它们的使用决非看上去那么简单,因此灵活而正确地使用构造函数和析构函数能够帮助用户更好的理解CLR的内存管理机制以及更好的管理系统中的资源。

(2)、类与对象

类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它有一个类名,类名包括属性说明和服务说明两个主要部分。

对象时系统中用来描述客观事物的一个实体,是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,反映了该事物在系统中需要保存的信息和发挥的作用,是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。

类和对象的关系就如模具和铸件的关系,类的实例化的结果就是对象。而对一类对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。温馨提示:如需预约免费试听课程,请将姓名,联系方式,以及预约的课程发送至以下手机、QQ、或微信,如有疑问也可拨打热线电话。报名咨询热线:15112251330    QQ:1358148771    微信:1358148771

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容