.NET/C#⾯试题汇总系列:基础语法

1. 字符串中string str=null和string str=""和string str=string.Empty的区别?

  1. string str = null;:这种方式声明了一个字符串变量str,并将其初始化为null。这意味着str不指向任何实际的字符串对象。如果你试图访问str的属性或方法,将会抛出一个NullReferenceException异常。

  2. string str = "";:这种方式声明了一个字符串变量str,并将其初始化为空字符串("")。这意味着str是一个有效的字符串对象,但它的长度为0,没有任何字符。你可以安全地调用str的方法,而不会抛出异常。

  3. string str = string.Empty;:这种方式与string str = "";相同,都是将str初始化为一个空字符串。使用string.Empty是一种编程习惯,因为它明确表示你的意图是将字符串初始化为空。然而,在性能方面,这两种方式没有区别。

总结一下,

如果你想要声明一个未初始化的字符串变量,可以使用string str;(默认情况下,局部变量会被初始化为null)。

如果你想要将字符串初始化为空,可以使用string str = "";string str = string.Empty;。 

2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 这些变量有些 错误是错再哪⾥? 

在C#中,byte是一种基本数据类型,用于表示一个8位无符号整数。它的取值范围是0到255。byte类型的变量可以用来存储二进制数据、图像数据、音频数据等。 

3.string和StringBuilder的区别,两者性能的⽐较 

  1. 可变性:string是不可变的,这意味着一旦创建了一个string对象,就不能更改它的内容。而StringBuilder是可变的,可以在不创建新对象的情况下修改其内容。

  2. 性能:由于string的不可变性,每次对其进行修改时,都需要创建一个新的string对象,这会导致额外的内存分配和垃圾回收开销。而StringBuilder在修改时不会创建新的对象,因此在进行大量字符串操作时,使用StringBuilder的性能会更好。

 4.什么是扩展⽅法?

扩展方法(Extension Methods)是一种在C#中为现有类型添加新功能的方法,而无需修改原始类型的源代码。

条件:按扩展⽅法必须满⾜的条件,

1.必须要静态类中的静态⽅法

2.第⼀个参数的类型是要扩展的类型,并且需要添加this关键字以标识其为扩展⽅法 

建议:通常,只在不得已的情况下才实现扩展⽅法,并谨慎的实现

使⽤:不能通过类名调⽤,直接使⽤类型来调⽤ 

 5.byte a =255;a+=5;a的值是多少?

 byte的取值范围是0--255,a+=1时,a的值时0,所 以a+=5时,值是4

 6.什么是装箱和拆箱?

装箱:将类型转换为引用类型的过程称为装箱

int num = 42;
object boxedNum = num; // 装箱操作

拆箱:将引用类型转换类型的过程称为拆箱

object boxedNum = 42;
int num = (int)boxedNum; // 拆箱操作

装箱和拆箱操作可能会带来性能开销,因为它们涉及到内存分配和数据复制。在编写代码时,应尽量避免不必要的装箱和拆箱操作,以提高程序的性能。 

 7.值类型和引⽤类型的区别

值类型变量是直接包含值。将⼀个值类型变量赋给另⼀个值类型变量,是复制包含的值,默认值是0。

引⽤类型变量的赋值只复制对对象的引⽤,⽽不复制对象本身,默认值是null 

值类型有整形、浮点型、bool、枚举。

引⽤类型有class、delegate、Object、string

 值类型存储在中,引⽤类型存储在

 8.new关键字的作⽤?

  1. 创建对象实例
    MyClass obj = new MyClass(); 
  2. 初始化变量:
    int[] arr = new int[5]; // 创建一个长度为5的整数数组
  3. 调用构造函数
    MyClass obj = new MyClass(param1, param2);
  4. 匿名类型初始化:
    var obj = new { Name = "John", Age = 30 };
  5. 数组初始化
    int[] arr = new int[] { 1, 2, 3, 4, 5 };
  6. 放置语句:
    object obj = new object(); // 将对象放置在堆上

    int num = new int(); // 将对象放置在栈上
  7. 泛型类型参数:
    List<int> list = new List<int>();
  8. 嵌套类访问
    OuterClass.NestedClass nestedObj = new OuterClass.NestedClass();

9. int?和int有什么区别?

  • int?为可空类型,默认值可以是null
  • int默认值是0
  • int?是通过int装箱为引⽤类型实现

使用int?的一个优点是可以避免空引用异常(NullReferenceException) 

10. C#中的委托是什么?

  •  将⽅法当作参数传⼊另⼀个⽅法的参数。
  • .net中有很多常⻅的委托如:Func 、Action
  • 作⽤:提⾼⽅法的扩展性

 11.⽤最有效的⽅法算出2乘以8等于⼏?

位运算是最快,使⽤的是位运算 逻辑左位移<<。 ⽅法是2<<3相当于0000 0000 0000 0010 (2的16位 int⼆进制)左移三位就是 0000 0000 0001 0000(16的⼆进制)

12.const和readonly有什么区别

 const和readonly都是用于声明不可变变量的关键字

 const关键字用于声明常量,即在声明时必须初始化,并且之后不能被修改。

const int myConstant = 10;

 readonly关键字用于声明只读字段,它可以在声明时或构造函数中初始化,并且在对象实例化后可以更改一次。

public class MyClass
{public readonly int a;public MyClass(int value){a = value;}
}

13.现有⼀个整数number,请写⼀个⽅法判断这个整数是否是2的N次⽅

 取模运算: ⽤number%2==0可以判断,但是这个有点低级

 14.CTS、CLS、CLR分别作何解释

1. CTS(Clear To Send):CTS是一种通信协议信号,用于在数据传输之前确认接收方是否准备好接收数据。

2. CLS(Clear Screen):CLS是一个命令或函数,用于清除终端或控制台屏幕上的文本内容。

3. CLR(Clear Register):CLR是一个指令或操作码,用于将寄存器的内容清零。

15.在.net中,配件的意思是?

配件(Assembly)是指一个包含程序集的二进制文件。
1. 程序集:这是.NET应用程序的主要组成部分,它包含了编译后的代码和元数据。程序集可以是动态链接库(DLL)或可执行文件(EXE)。
2. 资源:这些是与程序集关联的数据,如图像、音频、文本等。资源可以被嵌入到程序集中,也可以作为外部文件存储。
3. 清单:清单是一个描述程序集内容的XML文件,它包含了程序集的名称、版本、公钥等信息。清单还描述了程序集所依赖的其他程序集。

 16.分析下⾯代码,a、b的值是多少?

1 string strTmp = "a1某某某";
2 int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
3 int b = strTmp.Length;

 分析:⼀个字⺟、数字占⼀个byte,⼀个中⽂占占两个byte,所以a=8,b=5

 17.Strings = new String(“xyz”);创建了⼏个String Object?

两个对象,⼀个是“xyz”,⼀个是指向“xyz”的引⽤对象s。

18.静态成员和⾮静态成员的区别 

1.静态成员⽤statis修饰符声明,在类被实例化时创建,通过类进⾏访问

2.不带statis的变量时⾮静态变量,在对象被实例化时创建,通过对象进⾏访问,

3.静态⽅法⾥不能使⽤⾮静态成员,⾮静态⽅法可以使⽤静态成员

4.静态成员属于类,⽽不属于对象

生命周期

  • 静态成员:静态成员变量的生命周期是整个程序运行期间。它们在程序启动时被创建,并且直到程序结束时才被销毁
  • 非静态成员:非静态成员变量的生命周期依赖于对象的生命周期。当对象被创建时,它的非静态成员被创建,当对象被销毁时,这些成员也随之销毁。

访问方式

  • 静态成员:静态成员可以通过类名直接访问,无需创建类的实例。这为在没有实例化对象的情况下使用类的成员提供了可能。
  • 非静态成员:非静态成员只能通过对象实例访问。每个对象有自己独立的非静态成员副本,它们的值可以在不同的对象间有所不同。

19.c#可否对内存直接操作 

 可以,但是不推荐

20.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

 s1+1不能显式转换成short类型,可以修改为s1 =(short)(s1 + 1) 。

short s1 = 1; s1 += 1正确

21.什么是强类型,什么是弱类型?哪种更好些?为什么?

强类型是在编译的时候就确定类型的数据,在执⾏时类型不能更改,⽽弱类型在执⾏的时候才会确定类型。

没有好不好,⼆者各有好处,强类型安全,因为它事先已经确定好了,⽽且效率⾼。

 22.using关键字的作⽤

1. using 指令 - 引入命名空间,也可using 别名

2. using 语句 - 确保资源释放

        释放资源,实现了IDisposiable的类在using中创建,using结束后会⾃定调⽤该对象的Dispose⽅法, 释放资源。

 23.ref和out有什么区别

1.都是按引⽤类型进⾏传递

2.属性不是变量不能作为out、ref参数传递

3.ref参数必须初始化。out不需要初始化

4.作⽤,当⽅法有多个返回值时,out⾮常有⽤

  • 初始值要求‌:ref参数在传递给方法之前必须被初始化,而out参数在传递前不必初始化(尽管在方法内部必须被赋予一个值)。
  • 用途‌:ref常用于需要修改输入参数并返回修改后结果的情况。out则更侧重于输出参数,尤其是当方法需要返回多个值时。
  • 可读性‌:out参数的使用有助于阅读代码的人了解该参数是一个输出值,而ref参数的意图可能不那么明显。

24.a.Equals(b)和a==b⼀样吗? 

 不⼀样,a==b仅仅表示a和b值相等,a.Equals(b)表示a与b⼀致

25.下⾯这段代码求值

1 class Class1
2     {
3         internal static int count = 0;
4         static Class1()
5             {
6                 count++;
7             }
8         public Class1()
9             {
10                 count++;
11             }
12     }
13     Class1 o1 = new Class1();
14     Class1 o2 = new Class1();

o1.count的值是多少?

答案:3,静态 构造⽅法计算⼀次,两个实例化对象计算两次。

 26.关于构造函数说法正确的是哪个?

  • a)构造函数可以声明返回类型。
  • b)构造函数不可以⽤private修饰
  • c)构造函数必须与类名相同
  • d)构造函数不能带参数

答案:c ,构造函数必须与类名相同,可以传递多个传递,作⽤就是便于初始化对象成员,不能有任何返回类型

27.下面这段代码求值

Math.Round(11.5)=12

Math.Round(-11.5)=-12

 28..&和&&的区别

  1. 操作方式
    • & 是一个按位与运算符,它对两个数的每一位进行逻辑与操作。这意味着,如果同一位置的两个比特均为1,则结果在该位置为1,否则为0。例如,12 (1100 in binary) & 7 (0111 in binary) 将产生 4 (0100 in binary)
    • && 是一个布尔逻辑运算符,用于连接两个条件表达式。当两个表达式都为真时,结果才为真。如果第一个表达式为假,则不会计算第二个表达式,因为结果已确定为假。这被称为“短路”行为。
  2. 应用场景
    • & 通常用于整数的二进制操作,如设置特定位、清除特定位或检查特定位的状态。例如,你可以使用按位与来检查一个数字是否为偶数:(number & 1) == 0
    • && 主要用于布尔逻辑判断,如if语句和while循环中的条件判断。例如,你可以在if语句中使用 && 来确保两个条件同时满足:if (isValid && isAuthenticated)
  3. 返回类型
    • & 其操作数通常为整数,返回的结果也是一个整数
    • && 其操作数通常为布尔值,返回的结果也是一个布尔值

 29. i++和++i有什么区别?

1.i++是先赋值,然后再⾃增;++i是先⾃增,后赋值。

2.i=0,i++=0,++i=1; Console.WriteLine(i==i); 结果位true

30.as和is的区别 

as在转换的同时判断兼容性,如果⽆法进⾏转换,返回位null(没有产⽣新的对象),as转换是否成功判 断的依据是是否位null is只是做类型兼容性判断,并不执⾏真正的类型转换,返回true或false,对象为 null也会返回false。

as⽐is效率更⾼,as只需要做⼀次类型兼容检查 

 as 和 is 关键字主要用于类型检查和转换,但它们的行为和用途有所不同

应用场景

  • as: 当你尝试将一个对象转换为另一个类型时,如果转换失败,as操作符不会引发异常,而是返回null。这使得as在不确定类型转换是否安全时非常有用。
  • isis操作符用于检查对象是否为特定的类型。如果对象是指定类型或者是其派生类型,is表达式的结果为true,否则为false。与as不同,is不进行转换,它仅用于类型检查。

返回类型

  • asas操作符尝试将对象转换为指定的类型,并返回转换后的对象或null。如果转换失败,不会引发异常。
  • isis操作符返回一个布尔值,表示类型检查是否成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTPS SEO优势

搜索引擎优化&#xff08;SEO&#xff09;是提高网站在搜索引擎结果页&#xff08;SERP&#xff09;中的排名以吸引更多访问者的过程。HTTPS作为网站安全的标准&#xff0c;对SEO有着直接和间接的优势&#xff1a; 1. HTTPS作为排名信号 2014年&#xff0c;Google宣布HTTPS成…

穿越机的应用行业!!!

1. 军事领域 侦察与目标搜索&#xff1a;穿越机能够快速穿越危险区域&#xff0c;执行侦察任务&#xff0c;实时获取战场信息&#xff0c;对敌方目标进行精确搜索和定位。其灵活性和机动性使其成为战场上的重要侦察工具。 目标摧毁&#xff1a;经过改装的穿越机可挂载火箭弹或…

华三防火墙第-安全策略02

一 安全策略的图解 安全策略是一种根据报文的属性信息对报文进行精细化转发控制的智能安全防护措施。它 融合了多维度精确报文识别、深度报文检测、安全动作执行、智能策略分析、应用风险调 优等多种安全防护功能,为网络的安全性提供全方位保障。 安全策略运行原理 安全策略对…

CSS实现文字环绕圆形展示

展示区域 代码区域 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

ubuntu20.04搭建kubernetes1.28.13集群配置calico网络插件

写在前面 这里是我在搭建过程中从某站找到的教学视频,搭载的都是最新的,大家可以参考一下 搭建kubernetes集群学习视频: 视频链接。最后面会有我遇见报错信息的所有连接和解决方案,自行查看 不说废话,直接开搭 搭建集群大纲 一、三台虚拟机的初始化 二、三台虚拟机连接…

[240905] 如何使用 JAX 和 Equinox 构建图卷积网络 | Cascadia 字体家族迎来新成员

目录 如何使用 JAX 和 Equinox 构建图卷积网络1 使用邻接矩阵1.1 邻接矩阵表示法1.2 图卷积层实现1.3 计算过程解释 2 使用边列表2.1 边列表表示法2.2 图卷积层实现2.3 代码解析&#xff1a;jax.ops.segment_sum2.4 计算节点度数示例2.5 边列表表示法的优势 3 模型训练3.1 任务…

VTK平面切割

文章目录 一、vtkClipPolyData二、CapClip三、SolidClip四、vtkClipClosedSurface 本文的主要内容&#xff1a;简单介绍VTK中通过平面切割模型的相关功能。 哪些人适合阅读本文&#xff1a;有一定VTK基础的人。 一、vtkClipPolyData VTK官网描述&#xff1a; vtkClipPolyData使…

解决AbortController中断请求无法再次请求

示例代码 express代码 const express require(express) const app express()//导入cors跨域中间件 const cors require(cors) // 全局注册&#xff0c;加前缀 app.use(cors())app.get(/list, (req, res) > {// 直接返回对象console.log(接收到的参数是, req.query)//结…

一个平台重要的规则改了!

大家好&#xff0c;我是凡人小哥。 是一个不黑、不吹、不跟风、有知识、有骨气的五好小号主。 现在是凌晨1点13分&#xff0c;就在昨天微信公众平台又又又调整了&#xff0c;可能朋友们还在想是不是又要严格了&#xff1f;这次恰恰相反&#xff0c;腾讯把注册微信公众号的门槛…

F - Simplified Reversi 矩阵侧边视角 修改

1 行修改的时候只&#x1f525;影响的是哪些位置 因为Queries are pairwise distinct. 也就是当前行修改过之后 当前行就不会重复修改。额。实际上如果没有这个条件也无所谓的 我们可以用一个vis来判重就行 2 用什么东西可以维护这样的区间修改 主要还是行列间的 查询和修改的互…

【Linux网络编程八】实现最简单Http服务器(基于Tcp套接字)

基于TCP套接字实现一个最简单的Http服务器 Ⅰ.Http请求和响应格式1.请求格式2.响应格式3.http中请求格式中细节字段4.http中响应格式中细节字段 Ⅱ.域名ip与URLⅢ.web根目录Ⅳ.Http服务器是如何工作的&#xff1f;一.获取请求二.分析请求2.1反序列化2.2解析url 三.构建响应3.1构…

RK3588开发板利用udp发送和接收数据

目录 1 send.cpp 2 receive.cpp 3 编译运行 4 测试 1 send.cpp #include <iostream> #include <string> #include <cstring> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> //…

Nginx源码阅读1-内存池

首先我们来看一下他的一个基础组件&#xff1a;内存池组件。为什么先从内存池开始呢&#xff0c;因为后面 nginx 的内置数据结构&#xff0c;如&#xff1a;array&#xff0c;string 等都是从内存池分配的。 为什么需要内存池呢&#xff1f;在高并发的前提下&#xff0c;会大量…

【机器学习】K近邻

2. K近邻 K近邻算法&#xff08;KNN&#xff09;的基本思想是通过计算待分类样本与训练集中所有样本之间的距离&#xff0c;选取距离最近的 K 个样本&#xff0c;根据这些样本的标签进行分类或回归。KNN 属于非参数学习算法&#xff0c;因为它不假设数据的分布形式&#xff0c…

海外合规|新加坡网络安全认证计划简介(三)-Cyber Trust

一、 认证简介&#xff1a; Cyber Trust标志是针对数字化业务运营更为广泛的组织的网络安全认证。该标志针对的是规模较大或数字化程度较高的组织&#xff0c;因为这些组织可能具有更高的风险水平&#xff0c;需要他们投资专业知识和资源来管理和保护其 IT 基础设施和系统。Cy…

开源 AI 智能名片 O2O 商城小程序:引入淘汰机制,激发社交电商新活力

摘要&#xff1a;本文深入探讨在社交电商领域中&#xff0c;开源 AI 智能名片 O2O 商城小程序如何通过设置淘汰机制&#xff0c;实现“良币驱逐劣币”&#xff0c;激励士气&#xff0c;为社交电商企业注入新的活力。通过分析缺乏淘汰机制的弊端以及设置淘汰机制的优势&#xff…

用python发送邮件

用python发送邮件需要smtplib&#xff0c;email包,例子如下&#xff1a; import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipartdef send_email():# 邮件的基本信息sender_email "xx.com" # 发送方邮箱receiver_e…

CAAC无人机飞行执照理论培训课程详解

CAAC&#xff08;中国民用航空局&#xff09;无人机飞行执照的理论培训课程是确保无人机飞手全面掌握飞行和应用技能的重要环节。以下是对该理论培训课程的详细解析&#xff1a; 一、课程目标 理论培训课程的主要目标是使学员&#xff1a; 了解并掌握无人机相关的法律法规、…

Java基于微信小程序的家庭财务管理系统,附源码

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…

EmguCV学习笔记 VB.Net 8.4 pyrMeanShiftFiltering

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…