博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类和结构
阅读量:5251 次
发布时间:2019-06-14

本文共 2133 字,大约阅读时间需要 7 分钟。

类是一种“引用类型”。创建类的对象时,对象赋值到的变量只保存对该内存的引用。将对象引用赋给新变量时,新变量引用的是原始对象。通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。

结构是一种值类型。创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构。因此,新变量和原始变量包含同一数据的两个不同的副本。对一个副本的更改不影响另一个副本。

类通常用于对较为复杂的行为建模,或对要在创建类对象后进行修改的数据建模。结构最适合一些小型数据结构,这些数据结构包含的数据以创建结构后不修改的数据为主。

“类”是一种构造,通过使用该构造,您可以将其他类型的变量、方法和事件组合在一起,从而创建自己的自定义类型。类定义类型的数据和行为。如果类没有声明为静态类,客户端代码就可以创建赋给变量的“对象”或“实例”,从而使用该类。在对变量的所有引用都超出范围之前,该变量始终保持在内存中。所有引用都超出范围时,CLR 将标记该变量以供垃圾回收。如果类声明为静态类,则内存中只存在一个副本,并且客户端代码只能通过该类自身而不是“实例变量”访问该类。

与结构不同,类支持“继承”,而继承是面向对象编程的基础特性。

类的声明:

类使用 class 关键字进行声明,如下所示:

1 public class Customer2 3 {4 5     //Fields, properties, methods and events go here...6 7 }

class 关键字前面是访问级别。由于在该例中使用 public,因此任何人都可以基于该类创建对象。类的名称位于 class 关键字的后面。定义的其余部分是类的主体,用于定义行为和数据。类的字段、属性、方法和事件统称为“类成员”。

创建对象:

通过使用 new 关键字可以创建对象,如下所示:

1 Customer object1 = new Customer();

创建类的实例后,将向程序员传递回对该对象的引用。在前面的示例中,object1 是对基于 Customer 的对象的引用。此引用引用新对象,但不包含对象数据本身。也可以在不创建对象的情况下创建对象引用:

1 Customer object2;

可以创建这样的引用来引用对象,方法是创建新对象,或者将它分配给现有的对象,如下所示:

1 Customer object3 = new Customer();2 3 Customer object4 = object3;

此代码创建了两个对象引用,它们引用同一个对象。因此,通过 object3 对对象所做的任何更改都将反映在随后使用的 object4 中。由于基于类的对象是按引用来引用的,因此类称为引用类型。

类的继承:

继承是通过使用“派生”来实现的,而派生意味着类是使用“基类”声明的,它的数据和行为从基类继承。通过在派生的类名后面追加冒号和基类名称,可以指定基类,如下所示:

1 public class Manager : Employee2 3 {4 5     // Employee fields, properties, methods and events are inherited6 7     // New Manager fields, properties, methods and events go here...8 9 }

当类声明基类时,它继承基类除构造函数以外的所有成员。C# 中的类只能直接从一个基类继承。但是,因为基类自身也可能继承自另一个类,所以类可以间接继承多个基类。而且,一个类可以直接实现一个以上的接口。

结构是使用 struct 关键字定义的,例如:

1 public struct PostalAddress2 3 {4 5     // Fields, properties, methods and events go here...6 7 }

结构与类共享大多数相同的语法,但结构比类受到的限制更多:

(1)在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。

(2)结构不能声明默认构造函数(没有参数的构造函数)或析构函数。

(3)结构在赋值时进行复制。将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。在使用值类型的集合(如 Dictionary<string, myStruct>)时,请务必记住这一点。

(4)结构是值类型,而类是引用类型。

(5)与类不同,结构的实例化可以不使用 new 运算符。

(6)结构可以声明带参数的构造函数。

(7)一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。

(8)结构可以实现接口。

(9)结构可用作可以为 null 的类型,因而可向其赋 null 值。

 

转载于:https://www.cnblogs.com/fuddlemare/archive/2013/04/29/3050362.html

你可能感兴趣的文章
MyBatis日记(三):戏说MyBatis配置文件
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
VopSdk一个高逼格微信公众号开发SDK(源码下载)
查看>>
关于cocos2d-x中CCScrollView添加CCMenu一系列问题的解决方案
查看>>
mysql中进行删除操作时用到not in 导致删除不成功
查看>>
Java虚拟机详解03----常用JVM配置参数
查看>>
视频采集,存成avi
查看>>
SpringCloud重试机制配置
查看>>
[转载]项目经理能力训练-如何讲解PPT?
查看>>
phpdesigner 7 注册码(key)(转)
查看>>
【BZOJ3674】可持久化并查集加强版
查看>>
exBSGS板子
查看>>
wp7 使用缓存 改善性能
查看>>
CS294-112 深度强化学习 秋季学期(伯克利)NO.1 Introduction NO.2 Supervised learning and imitation...
查看>>
[CV] OpenCV图像处理教程- 23:像素重映射pixel remap
查看>>
竞争性排斥原理(高斯假说)
查看>>
Intellig IDEA 搭建spring boot 热部署
查看>>
MySQL 对于大表(千万级),要怎么优化呢?
查看>>
sqlmap基础入门超详细教程
查看>>