C#基础笔记 Day3

第 7 章:类和对象

匿名类

匿名类的直接意义:根本不知道是什么类型。可以使用 var 关键字将匿名类其声明为隐式类型的变量。

var anonymousObject = new { Name = "John", Age = 47 };

第8章:值和引用

变量(包括类)在声明时初始化。

private关键字创建了不能从类外访问的字段或方法。
创建自同一个类的两个对象,它们分别能访问对方的私有数据。

clone.radius = this.radius;

Circle 类的当前实例能够访问 clone对象的私有 radius 字段。
综上,私有所指的范围是类而不是对象。

可空类型

可用于描述数据库中部分不重要数据为空时的状态。
可空值类型在行为上与普通值类型相似,但可以将 null 值赋给它。
初始化可空值类型时要用问号(?):

int? i = null; 

可以将恰当值类型的表达式直接赋给可空变量。
为了判断可空变量是否包含 null,可采取和引用类型一样的测试办法:

if (i == null)
...

实参调用:ref

需要使用实参调用时,为参数的声明和引用附加ref前缀。

static void pass(ref int param){
    param++;
}
static void Main(){
    int num = 42;
    pass(ref num); 
    ···
}

传递未初始化的实参:out

由方法本身初始化参数,所以调用方法时不需要对实参进行初始化。
为参数的声明和引用附加out前缀。

static void pass(ref int param)
{
    param = 42;
}
static void Main()
{
    int num ;
    pass(ref num); 
    ···

内存管理

“栈”和“堆”这两个词来源于“运行时”的内存管理方式。
栈内存就像一系列堆得越来越高的箱子。调用方法时,它的每个参数都被放入一个箱子,并将这个箱子放到栈的最顶部。每个局部变量也同样分配到一个箱子,并同样放到栈的最顶部。方法结束后,它的所有箱子都从栈中移除。

堆内存则像散布在房间里的一大堆箱子,不像栈那样每个箱子都严格地堆在另一个箱子上方。每个箱子都有一个标签,标记了这个箱子是否正在使用。创建新对象时,“运行时”查找空箱子,把它分配给对象。对对象的引用则存储在栈上的一个局部变量中。“运行时”跟踪每个箱子的引用数量(记住,两个变量可能引用同一个对象)。一旦最后一个引用消失,运行时就将箱子标记为“未使用”。将来某个时候,会清除箱子里的东西,使之能被重用。
这里写图片描述
p.s.这一部分引用自原文。

装箱与拆箱

int i = 42;
object o = i;

i 是值类型,所以它在栈中。如果 o 直接引用 i,那么引用的将是栈。然而,根据内存管理部分笔记,所有对象的引用必须在堆上。
为了解决这类矛盾,实际运行时在堆中分配一小块内存,然后 i 的值被复制到这块内存中,最后让 o 引用该拷贝。
这种将数据项从栈自动复制到堆的行为称为装箱。
装箱完成后栈和堆上的两个暂时相同的值再无关联。
这里写图片描述

为了访问已装箱的值,必须进行强制类型转换。

int i = 42;
object o = i; // 装箱
i = (int)o; //拆箱

假如强制类型转换成功执行,编译器生成的代码会从装箱的 int 中提取出值,这个过程称为拆箱。

两种操作对性能有一定影响。

安全转换数据类型涉及的操作符

is 操作符验证 期望对象的类型。

WrappedInt wi = new WrappedInt();
...
object o = wi;
if (o is WrappedInt) {
WrappedInt temp = (WrappedInt)o; // 安全转型
...
}

is 操作符取两个操作数:左边是对对象引用,右边是类型名称。如果左边的对象是右边的类型,则 is 表达式的求值结果为 true,反之为 false。

as操作符与is类似。

WrappedInt wi = new WrappedInt();
...
object o = wi;
WrappedInt temp = o as WrappedInt;
if (temp != null){
... // 只有转型成功,这里的代码才会执行
}

as 操作符取对象和类型作为左右操作数。“运行时”尝试将对象转换成指定类型。若转换成功,就返回转换成功的结果。转换失败时, as 表达式的求值结果为 null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
森林防火应急联动指挥系统是一个集成了北斗定位/GPS、GIS、RS遥感、无线网络通讯、4G网络等技术的现代化智能系统,旨在提高森林火灾的预防和扑救效率。该系统通过实时监控、地图服务、历史数据管理、调度语音等功能,实现了现场指挥调度、语音呼叫通讯、远程监控、现场直播、救火人员生命检测等工作的网络化、智能化、可视化。它能够在火灾发生后迅速组网,确保现场与指挥中心的通信畅通,同时,系统支持快速部署,适应各种极端环境,保障信息的实时传输和历史数据的安全存储。 系统的设计遵循先进性、实用性、标准性、开放性、安全性、可靠性和扩展性原则,确保了技术的领先地位和未来的发展空间。系统架构包括应急终端、无线专网、应用联动应用和服务组件,以及安全审计模块,以确保用户合法性和数据安全性。部署方案灵活,能够根据现场需求快速搭建应急指挥平台,支持高并发视频直播和大容量数据存储。 智能终端设备具备三防等级,能够在恶劣环境下稳定工作,支持北斗+GPS双模定位,提供精确的位置信息。设备搭载的操作系统和处理器能够处理复杂的任务,如高清视频拍摄和数据传输。此外,设备还配备了多种传感器和接口,以适应不同的使用场景。 自适应无线网络是系统的关键组成部分,它基于认知无线电技术,能够根据环境变化动态调整通讯参数,优化通讯效果。网络支持点对点和点对多点的组网模式,具有低功耗、长距离覆盖、强抗干扰能力等特点,易于部署和维护。 系统的售后服务保障包括安装实施服务、系统维护服务、系统完善服务、培训服务等,确保用户能够高效使用系统。提供7*24小时的实时故障响应,以及定期的系统优化和维护,确保系统的稳定运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值