const和ReadOnly、==、Equals、ReferenceEquals、GC

本文深入探讨C#中的const与ReadOnly的区别,GC的工作原理,==、Equals、ReferenceEquals的用法,抽象类与接口的对比,以及单例模式的实现等高级主题,旨在帮助开发者掌握C#的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.const和ReadOnly的区别
const是静态常量:是指编译器在编译时会对常量进行解析,并将常量的值替换成初始化的值;
ReadOnly是动态常量:是指在运行时获得的,编译器在编译期间标识为只读常量,而不用常量的值代替;
区别:
Const修饰的常量在声明的时候必须初始化,ReadOnly则可以延迟到构造函数初始化;
Const常量既可以声明在类中还可以在函数体内,ReadOnly只能在类中;
Const修饰的常量在编译期间就被解析,ReadOnly修饰的常量则延迟到运行的时候才被解析
2.GC是什么?
GC是垃圾回收机制,GC会自动处理托管内存资源,进行回收释放,而非托管资源则不能使用GC进行回收,必须手动回收。
3.==、Equals、ReferenceEquals 是什么?
==:静态相等符号,它是一个可以重载的二元操作符,可以用于比较两个对象是否相等。对于值类型,判断的是两个对象的代数值是否相等(有隐式类型转换);对于引用类型,判断的是引用类型的引用是否相等,string字符串特殊。
Equals:Equals属于Object的实例方法,用于比较两个对象的引用是否相等,值类型,类型相同(不会进行类型自动转换),并且数值相同(对于struct的每个成员都必须相同),则Equals返回 true,否则返回false,
对于引用类型,判断的是引用类型的引用是否相等
ReferenceEquals :Object的静态方法,对于值类型和引用类型来说,都是比较两个对象的引用是否是否相等。对于值类型来说,返回false,对于引用来说,判断引用类型的引用是否相等
4.抽象类与接口的区别?
抽象类:包含一个或多个抽象方法的类,声明时必须加abstract关键字,子类继承父类时,可用override关键字覆盖父类中的抽象方法
接口:是指类与类之间的一种协定、约束,继承接口中的类必须实现接口中的方法
相同点:都可被继承,都不能实例化,都可包含方法的声明
不同点:抽象类可以实现类成员,接口只能声明不能实现;
抽象类包含字段,接口没有字段但有属性;
抽象类的成员可以使用公开或其他修饰符,接口不需要修饰;
抽象类不支持多重继承,只能继承一个类,但可以实现多个接口,接口支持多重继承
5.类与接口的异同?
不同点:
类能实例化,接口不能实例化。
接口不包含方法的实现。
类只能单继承,接口可以多继承。
接口中不能包含常量、字段、构造函数、析构函数、静态成员。
相同点:
接口、类都可以从多个接口继承。
接口和类都可以包含事件、索引器、属性。
6.虚拟virtual、抽象abstract
抽象方法是只有方法名称,没有方法体,子类继承父类时必须重写父类抽象方法;
(虚拟)虚函数有方法体,子类可以继承父类,也可以重写,但是子类可以覆盖,也可不覆盖。
相同点:都是为了重写
两者区别:
(1)抽象方法只有方法名称,没有方法体,虚方法有方法体。抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化;
(2)抽象方法只能在抽象类中声明,虚方法不是;
(3)派生类必须重写抽象类中的抽象方法,虚方法则不必要。
7.
三个范式:
第一范式:字段不能有冗余信息,所有字段都是必不可少的。
第二范式:满足第一范式并且表必须有主键。
第三范式:满足第二范式并且表引用其他的表必须通过主键引用。
8.Server.Transfer和Response.Redirect的区别是什么?
地址栏:
1.Server.Transfer在服务器端完成,所以客户端浏览器中的URL地址是不会改变的;
2.Response.Redirect是客户端完成,向服务器端提出新的页面处理请求,所以客户端浏览器中的URL地址是会改变的。
切换对象:
1、Response.Redirect可以切换到任何存在的网页。
2、Server.Transfer只能切换到同目录或者子目录的网页。
数据保密:
1、Response.Redirect后地址会变成跳转后的页面地址。
2、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。
传递的数据量(网址后附带的参数):
1、Response.Redirect能够传递的数据以2KB为限。
2、传递的数据超过2KB时,务必使用Server.Transfer。
使用区域:
1、Response.Redirect()可以从一个跨服务器跨站点跳转。
2.Server.Transfer()只能从在同一服务器端的同一站点间运行,
建立通讯:
1.Response.Redirect()需要客户端(浏览器)与服务端进行两次通信。
2.Server.Transfer()跳转只需要客户端和服务端一次通讯,跳转在服务端实现,减轻服务器的压力
9.单例模式的作用?
好处:①封装了唯一性,可严格控制客户怎样访问以及何时访问;
? ②内存中只有一个对象,可节约系统资源,提高系统性能;
如何实现:
①将构造函数私有化
②使用一个公开静态类
? ③使用一个静态属性进行判断当前窗口是否被创建

内容概要:智能车竞赛全流程设计与实战应用VIP教程主要针对电子信息与自动控制领域的智能车竞赛,系统讲解了从设计到实战的各个方面。教程首先介绍了比赛规则、评分标准及赛道特征,使参赛者明确竞赛要求。接着分析了不同类型的智能车(循迹车、避障车、速度竞速车)及其设计侧重点。硬件部分详细讲解了单片机(如STM32)、传感器模块、电机驱动电路及供电方案的选择与连接,确保硬件系统的稳定高效。软件开发章节涵盖了嵌入式软件架构设计、底层驱动程序编写、传感器数据采集与滤波算法、运动控制算法及路径规划,特别是PID控制、模糊控制等经典控制算法的应用。教程还介绍了多传感器数据融合方法及机器视觉技术,以提高环境感知能力。调试与测试部分讲解了示波器、逻辑分析仪等工具的使用,提供了赛前调试方案。最后,强调了竞赛策略与团队协作的重要性,并探讨了基于深度学习的路径识别等创新方向。; 适合人群:对智能车竞赛感兴趣的学生或爱好者,尤其是电子信息与自动控制专业的学生。; 使用场景及目标:①帮助参赛者准确把握竞赛要求与挑战;②掌握智能车硬件搭建、软件开发、算法设计、系统调试等核心技术;③提升竞赛策略与团队协作能力,实现优异成绩。; 其他说明:教程不仅注重理论知识的讲解,还强调实践训练,通过实际案例调试技巧,帮助学生全面提升智能车开发与竞赛水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值