你必须知道的25个C#基础概念

ROS水下仿真神器uuv_simulator:从零搭建水下机器人测试环境(附Gazebo配置全流程) 本文详细介绍了如何使用ROS和uuv_simulator从零搭建水下机器人仿真测试环境,包括Gazebo配置全流程。通过系统环境准备、水下世界构建、机器人模型定制开发等步骤,帮助开发者在虚拟海洋环境中高效验证算法,大幅降低研发成本。特别适合水下机器人研发人员参考。 阅读详情

1.静态变量和非静态变量的区别?
静态变量:静态变量使用 static 修饰符进行声明 ,在所属类被装载时创建,通过类进行访问,所属类的
所有实例的同一静态变量都是同一个值。
非静态变量:不带有static 修饰符声明的变量称做非静态变量,在类被实例化时创建,通过对象进行访
问,同一个类的不同实例的同一非静态变量可以是不同的值。

2.const 和 static readonly 区别?

const:用const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序。
static readonly:用static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的
使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化。

3.extern 是什么意思?
extern:修饰符用于声明由程序集外部实现的成员函数,经常用于系统API函数的调用。
注意:和DllImport一起使用时要加上static修饰符,也可以用于对于同一程序集不同版本组件的
调用(用extern声明别名),不能与abstract修饰符同时使用。

4.abstract 是什么意思?

abstract修饰符可以用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员。
abstract不可以和 static 、virtual 、override 一起使用。
声明为abstract成员可以不包括实现代码,但只有类中还有未实现的抽象成员,该类就不可以被实例化,
通常用于强制继承类必须实现某一成员。

5.internal 修饰符起什么作用?

internal 修饰符可以用于类型或成员,使用该修饰符声明的类型或成员只能在同一程集内访问,
接口的成员不能使用 internal 修饰符

6.sealed 修饰符是干什么的?

sealed修饰符表示密封,用于类时,表示该类不能再被继承,不能和abstract同时使用,
因为这两个修饰符在含义上互相排斥,用于方法和属性时,表示该方法或属性不能再被继承,
必须和override关键字一起使用,因为使用sealed修饰符的方法或属性肯定是基类中相应的虚成员,
通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成
层次结构体系混乱。恰当的利用sealed修饰符也可以提高一定的运行效率。

7.override 和 overload 的区别?

override 表示重写,用于继承类对基类中虚成员的实现。
overload 表示重载,用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现。

8.什么是索引指示器?

实现索引指示器(indexer)的类可以象数组那样使用其实例后的对象,但与数组不同的是索引指示器的
参数类型不仅限于int,简单来说,其本质就是一个含参数属性。

9.new 修饰符是起什么作用?
new 修饰符与 new 操作符是两个概念。
new 修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员。而new 操作符用于实例化一个类型。
new 修饰符只能用于继承类,一般用于弥补基类设计的不足。
new 修饰符和override修饰符不可同时用在一个成员上,因为这两个修饰符在含义上互相排斥。

10.this 关键字的含义?

this是一个保留字,仅限于构造函数和方法成员中使用。
在类的构造函数中出现表示对正在构造的对象本身的引用,
在类的方法中出现表示对调用该方法的对象的引用。
在结构的构造上函数中出现表示对正在构造的结构的引用,
在结构的方法中出现表示对调用该方法的结果的引用。
this保留字不能用于静态成员的实现里,因为这时对象或结构并未实例化。
在C#系统中,this 实际上是一个常量,所以不能使用this++这样的运算。
this保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身。

11.可以使用抽象函数重写基类中的虚函数吗?
可以,但需使用new修饰符显式声明,表示隐藏了基类中该函数的实现。

12.密封类可以有虚函数吗?

可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数。

13.如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有get和set两个呢?

如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后也应只有一个。
如果基类中有get和set两个属性访问器,那么继承类中可以只有一个也可以同时有两个属性访问器。

14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
abstract 修饰符不可以和 static、virtual 和 override 修饰符一起使用。

15.接口可以包含哪些成员?
接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员。

16.类和结构的区别?
类:类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存,
类有构造和析构函数,类可以继承和被继承。
结构:结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),
结构的赋值将分配产生一个新的对象。结构没有构造函数,但可以添加。结构没有析构函数,
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口。

17.接口的多继承会带来哪些问题?
C# 中的接口与类不同,可以使用多继承,即一个子接口可以有多个父接口。
但如果两个父成员具有同名的成员,就产生了二义性(这也正是C#中类取消了多继承的原因之一),这时在实现时最好使用显式的声明。

18.抽象类和接口的区别?
抽象类(abstract class)可以包含功能定义和实现,
接口(interface)只能包含功能定义,抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的
内部共性,接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性,分析对象,
提炼内部共性形成抽象类,用以表示对象本质,即“是什么”,为外部提供调用或功能需要扩充时优先使用接口。

19.别名指示符是什么?
通过别名指示符我们可以为某个类型起一个别名,主要用于解决两个命名空间内有同名类型的冲突或
避免使用冗余的命名空间,别名指示符只在一个单元文件内起作用。

20.如何释放非托管资源?

.NET平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的
工作,但它无法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资源,
比如你在对象的实现代码中使用了一个COM对象,最简单的办法,可以通过实现
protected void Finalize()(析构函数会在编译时变成这个东东)来释放非托管资源,
因为GC在释放对象时会检查该对象是否实现了 Finalize() 方法,如果是则调用它。
有一种更好的,那就是通过实现一个接口显式的提供给客户调用端手工释放对象的方法,
而不是傻傻的等着GC来释放我们的对象(何况效率又那么低),
System命名空间内有一个IDisposable接口,拿来做这事非常合适,就省得我们自己再声明一个接口了。
另外补充一句,这种实现并不一定要使用了非托管资源后才用,如果你设计的类会在运行时有大些的
实例(象GIS中的Geometry),为了优化程序性能,你也可以通过实现该接口让客户调用端在确认
不需要这些对象时手工释放它们。

21.P/Invoke是什么?
在受控代码与非受控代码进行交互时会产生一个事务(transition),
这通常发生在使用平台调用服务(Platform Invocation Services),即P/Invoke,
如调用系统的API或与COM对象打交道,通过System.Runtime.InteropServices命名空间,
虽然使用Interop非常方便,但据估计每次调用事务都要执行10到40条指令,算起来开销也不少,
所以我们要尽量少调用事务,如果非用不可,建议本着一次调用执行多个动作,
而不是多次调用每次只执行少量动作的原则。

22.StringBuilder 和 String 的区别?
String虽然是一个引用类型,但在赋值操作时会产生一个新的对象,而StringBuilder则不会,
所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder,不要使用String。

23.explicit 和 implicit 的含义?
explicit和implicit属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换,
explicti表示显式转换,如从A->B必须进行强制类型转换(B=(B)A),
implicit表示隐式转换,如从B->A只需直接赋值(A=B),
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。
不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端。

24.params 有什么用?

params关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,
它在只能出现一次并且不能在其后再有参数定义,之前可以。

25.什么是反射

反射,Reflection,通过它我们可以在运行时获得各种信息,
如程序集、模块、类型、字段、属性、方法和事件,
通过对类型动态实例化后,还可以对其执行操作,一般用于插件式框架程序和设计模式的实现,
当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情。

作为一名爬虫人如何实现千万级数据爬取? 爬虫门槛不高,高就高在往后余生的每一次实操都随时会让你崩溃!Bro 阅读详情

相关推荐

保姆级教程:用Zemax 18.9复现单模光纤耦合仿真(附康宁SMF-28e参数)

本文提供了一份详细的Zemax 18.9单模光纤耦合仿真教程,以康宁SMF-28e为例,涵盖从软件设置、材料参数输入到系统构建和优化的全流程。通过光束耦合分析和物理光学传播(POP)技术,帮助用户准确模拟光纤耦合效率,并解决常见问题,适用于光学设计初学者和专业人士。

weixin_27330481的博客 313

你必须知道的C#的25个基础概念

1.静态变量和非静态变量的区别? 静态变量:静态变量使用 static 修饰符进行声明 ,在所属类被装载时创建,通过类进行访问,所属类的 所有实例的同一静态变量都是同一个值。 非静态变量:不带有static 修饰符声明的变量称做非静态变量,在类被实例化时创建,通过对象进行访 问,同一个类的不同实例的同一非静态变量可以是不同的值。 2.const 和 sta...

arhxwpp82382的博客 348

【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因?

一、录音播放数据处理过程介绍 (1)TX方向 麦克风(硅麦克风或者主机体麦克风)采集模拟音频信号,经过内部CODEC芯片中的adc转换为数字信号,在经过高通音频DSP处理音效后编码为wav/aac/amr/mp3等格式文件。 (2)RX方向 音频文件经过解码、重采样还原为pcm数据,经过DSP处理音效后送到内部CODEC,然后经过DAC转换为模拟信号,送到喇叭。 二、分析步骤 1...

crow_ch的博客 5971

C#基础——基本概念

一、C#、CLR、.NET Framework(.NET框架) C#是开发语言,用于编写代码; CLR(Common Language Runtime,公共语言运行库),在运行期间进行内存管理、代码安全验证、代码执行、垃圾收集等(CLR有一项服务GC(Garbage Collector,垃圾收集),可以自动管理内存,减轻程序员负担); .NET Framework是开发框架,可看作是一个独立发布的软件包,其中包含了CLR、类库以及相关的工具等开发环境。 ...

QiGary的博客 764

全国职业院校技能大赛-大数据应用赛项-数据挖掘-01

-----------------------推荐Top5结果如下--------------------------------------------第一条数据前10列结果展示为:----------------------------------------相同种类前10的id结果展示为:--------------------相似度top5(商品id:14,平均相似度:0.522356)相似度top1(商品id:1,平均相似度:0.983456)若属于该spu_id,则内容为1否则为0。

Eternity_04的博客 1954

我是如何让爬虫在小红书风控下“偷数据”的?xhs爬虫这些骚操作你可能想不到

最绝的是,他们连评论区都做了动态加载,第一页显示20条评论,再往下滑就变成“加载失败”,实际上得模拟真人反复上滑下滑才能触发完整加载。上个月我们团队帮一家美妆品牌抓竞品爆款笔记,刚开了10个爬虫账号,结果5分钟不到,系统直接弹窗警告“检测到非正常操作”——后来发现,问题出在Wi-Fi上。小红书的风控每周都在升级,上周还能用的方案,这周可能就得重写。但要是想大规模采集,比如监控竞品爆文、分析用户画像,劝你先算笔账:光是一个能抗封的账号矩阵,每月成本就得烧掉几万块,更别说还得养团队随时应对系统升级。

klj3388的博客 1万+

类中static、const、readonly、partial修饰符

static 修饰类成员: static在C#中的用法与C++类似,当声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个静态成员的副本,static变量可在成员函数或类的定义外部进行初始化,也可以在类内部定义初始化静态变量,被static修饰的函数也称静态函数,静态函数成员可以访问其他静态成员,但不能访问实例成员,我们可以从类的外部访问静态成员,但在访问时,C#和C++在访问时...

寂蝶难双,窃窃思羽. 1155

2. 第一个 SAP CDS View 源代码的详细解析:CDS View 和底层自动生成 SQL View 的关系讲解

笔者前一篇教程文章,带着大家在 ABAP 系统创建了一个最简单的基于sflight数据库表的 CDS View:本文对这简单的 14 行源代码背后的知识点进行详细讲解。CDS 全称是 Core Data Services,它是一种数据建模技术,帮助开发者以更直观和高层的方式去描述数据库中所需的数据结构。在一个典型的 SAP ABAP 开发场景里,CDS 经常被用来编写各种用于报表、接口或业务逻辑的数据视图。通常,这些视图包含一系列注解。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1024

c# Interface, virtual , abstract, partial 总结

菜鸟开始上路了.. 学习C#或者面试经常会遇到关于interface abstract class ,vitual method 等异同点,为此总结一下帮助记忆: Virtual :用于方法声明时,不能用于class 声明时,这与abstract 不同 Virtual 和abstract 都能用于方法的声明,但是是virtual 和abstract 不能同时使用修饰方法 A...

dizhifu2954的博客 619

从零开始学 AUTOSAR:深入浅出 SAE J1939 诊断通信管理器(J1939Dcm)深度完整版

SAE J1939 是美国汽车工程师学会制定的重型车辆 CAN 总线通信标准,覆盖卡车、客车、工程机械、农机、船舶等,是商用车领域的 “通用语言”。基于CAN 2.0B 扩展帧(29 位 ID)(车规主流)PGN(参数组号)+ SPN(可疑参数号)核心标准:J1939-21:数据链路层(CAN 帧格式、地址声明)J1939-71:应用层(普通信号、报文)诊断层(核心!J1939Dcm 依据)J1939-81:网络管理(地址管理、节点检测)

getusushu的博客 117

全局注意机制 GAM | Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions

全局注意机制 GAM

Coding... 2576

C#的分部类(partial)和方法

一、实现的效果 C#的分部关键字(partial)能够拆分一个类、一个结构、一个接口或一个方法为两个或更多个的文件,分部的每个文件都可以包含自己的类型和方法,程序编译时会将同类的分部内容合并为一个。 这是关于《分部类(partial)和方法》的示例程序工程https://download.youkuaiyun.com/download/xiaochenXIHUA/85236324 二、分部类 2.0、类的修饰符 类修饰符说明 序号 类修饰符 类修饰符说明 1 new ..

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 6021

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

weixin_42412049的博客 2297

必须知道的C#的25个基础概念

1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修饰符起什么作用?6.sealed 修饰符是干什么的?7.override 和 overload 的区别?8.什么是索引指示器?9.new 修饰符是起什么作用?10.this 关键字的含义?11.可以使用抽象函数重写基类中的

大爱无疆 614

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C#你必须知道的25个基础概念

25个基础概念

paul50060049的专栏 1076

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# 25个必须知道的基础概念1

C# 25个必须知道的基础概念1(转)(面试可能会用到) 这段时间一边忙工作,一边在找新工作,面试过程中很多基础性的客观题,我在实际工作中真的用的很少,学过或者看过的也忘的差不多了,难免对最简单的问题产生一些迷惑,希望这篇帖子能给大家带来一些帮助。这可能是最最简单,我觉得对我来说起码面试前可能需要温习一下,我比较紧张啦。。。。。。不好笑话我。 转自:http...

weixin_34060741的博客 129

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: C#: const与readonly的用法和区别解析
下一篇: C# 中的关键字之:base、this(一)
Csdbfans
博客等级 码龄18年 73粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值