C#开发笔记
02、入门
03、进阶
04、架构
01、知识概念
01、基础语法
02、面向对象
03、集合、异常、泛型、LINQ、委托、EF
04、多线程
05、WPF
06、ASP.NET MVC
07、ASP.NET Core
08、ADO.NET、XML、HTTP、AJAX、WebService
09、常见的算法
10、数据库概念知识
11、数据库SQL查询(附建表语句)
00、高阶
05、U3D
01、基础
001、问的比较多的问题
06、前端开发
001、CSS基础
本文档使用 MrDoc 发布
-
+
首页
01、基础语法
#### 1. 字符串中 string str=null 和 string str=""和 string str=string.Empty 的区别? **string.Empty 相当于“”,Empty 是一个静态只读的字段。 string str="" ,初始化对象,并分配一个空字符串的内存空间 string str=null,初始化对象,不会分配内存空间** #### 2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 这些变量有些错误是错再哪里? **本题考查的是数据类型能承载数据的大小。** 1byte =8bit,1 个汉字=2 个 byte,1 个英文=1 个 byte=8bit 所以 bc 是对的,deg 是错的。'a'是 char 类型,a 错误 java byte 取值范围是-128\~127, 而 C#里一个 byte 是 0\~255 #### 3.string 和 StringBuilder 的区别,两者性能的比较 **都是引用类型,分配再堆上** StringBuilder 默认容量是 16,可以允许扩充它所封装的字符串中字符的数量.每个 StringBuffer 对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。 **对于简单的字符串连接操作,在性能上 stringbuilder 不一定总是优于 strin 因为 stringbulider 对象的创建也消耗大量的性能,在字符串连接比较少的情况下,过度滥用 stringbuilder 会导致性能的浪费而非节约,只有大量无法预知次数的字符串操作才考虑 stringbuilder 的使用。从最后分析可以看出如果是相对较少的字符串拼接根本看不出太大差别。** **Stringbulider 的使用,最好制定合适的容量值,否则优于默认值容量不足而频繁的进行内存分配操作,是不妥的实现方法。** **参考链接:**[https://www.cnblogs.com/haofuqi/p/4826262.html](https://www.cnblogs.com/haofuqi/p/4826262.html) #### 4.什么是扩展方法? **一句话解释,扩展方法使你能够向现有类型“添加”方法,无需修改类型** **条件:按扩展方法必须满足的条件,1.必须要静态类中的静态方法 2.第一个参数的类型是要扩展的类型,并且需要添加 this 关键字以标识其为扩展方法** **建议:通常,只在不得已的情况下才实现扩展方法,并谨慎的实现** **使用:不能通过类名调用,直接使用类型来调用** #### 5.byte a =255;a+=5;a 的值是多少? **byte 的取值范围是-2 的 8 次方至 2 的 8 次方-1,-256 至 258,a+=1 时,a 的值时 0,a+=5 时,a 的值是 0,所以 a+=5 时,值是 4** #### 6.什么是装箱和拆箱? **装箱就是隐式地将一个值类型转换成引用类型,如:** ```plain int i=0; Syste.Object obj=i; ``` **拆箱就是将引用类型转换成值类型,如:** ```plain int i=0; System.Object obj=i; int j=(int)obj;(将obj拆箱) ``` #### 7.值类型和引用类型的区别 **值类型变量是直接包含值。将一个值类型变量赋给另一个值类型变量,是复制包含的值,默认值是 0。** **引用类型变量的赋值只复制对对象的引用,而不复制对象本身,默认值是 null** 值类型有整形、浮点型、bool、枚举。 **引用类型有 class、delegate、Object、string** **值类型存储在栈中,引用类型存储在堆中** #### 8.new 关键字的作用? **运算符:创建对象实例** **修饰符:在派生类定义一个重名的方法,隐藏掉基类方法** **约束:泛型约束定义,约束可使用的泛型类型,如:** ```plain public class ItemFactory<T> where T : IComparable, new() { } ``` #### 9. int?和 int 有什么区别? **int?为可空类型,默认值可以是 null** **int 默认值是 0** **int?是通过 int 装箱为引用类型实现** #### 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 有什么区别? **都可以标识一个常量。主要有以下区别:** **1、初始化位置不同。const 必须在声明的同时赋值;readonly 即可以在声明处赋值,也可以在静态构造方法(必须是静态构造方法,普通构造方法不行)里赋值。** **2、修饰对象不同。const 即可以修饰类的字段,也可以修饰局部变量;readonly 只能修饰类的字段** **3、const 是编译时常量,在编译时确定该值;readonly 是运行时常量,在运行时确定该值。** **4、const 默认是静态的;而 readonly 如果设置成静态需要显示声明** **5、修饰引用类型时不同,const 只能修饰 string 或值为 null 的其他引用类型;readonly 可以是任何类型。** #### 13.现有一个整数 number,请写一个方法判断这个整数是否是 2 的 N 次方 **4(100)、5(101)、8(1000)、16(10000)** **取模运算: 用 number%2==0 可以判断,但是这个有点低级** **位运算:(使用位运算逻辑并,两个位上的都为 1 才是 1,其余都是 0,判断是否等于 0)** **4&3 相当于 100&011 ,结果是 000 等于 0,所以 4 是 2 的 n 次方** **5&4 相当于 101&100,结果是 100 不等于 0,所以 5 不是 2 的 n 次方** **如果要问如果是 2 的 N 次方,这个 N 是多少?这该怎么算?** ```plain private static byte get(int n) { byte number = 1; while (n/2!=1) { n = n / 2; number += 1; } return number; } ``` #### 14.CTS、CLS、CLR 分别作何解释 **CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。** **CTS:Common Type System 通用类型系统。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了自己的类型,.Net 通过 CTS 提供了公共的类型,然后翻译生成对应的.Net 类型。** **CLS:Common Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语法,.Net 通过 CLS 提供了公共的语法,然后不同语言翻译生成对应的.Net 语法。** **CLR:Common Language Runtime 公共语言运行时,就是 GC、JIT 等这些。有不同的 CLR,比如服务器 CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行 IL。** #### 15.在.net 中,配件的意思是? **程序集。(中间语言,源数据,资源,装配清单)** #### 16.分析下面代码,a、b 的值是多少? ```plain string strTmp = "a1某某某"; int a = System.Text.Encoding.Default.GetBytes(strTmp).Length; 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#可否对内存直接操作 **C#在 unsafe 模式下可以使用指针对内存进行操作, 但在托管模式下不可以使用指针,C#NET 默认不运行带指针的,需要设置下,选择项目右键-> 属性-> 选择生成->“允许不安全代码”打勾-> 保存** #### 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.什么是强类型,什么是弱类型?哪种更好些?为什么? **强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。** **一般用于编译型编程语言,如 c++,java,c#,pascal 等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如 javascript,vb,php 等** #### 22.using 关键字的作用 **1.引用命名空间,也可 using 别名** **2.释放资源,实现了 IDisposiable 的类在 using 中创建,using 结束后会自定调用该对象的 Dispose 方法,释放资源。** #### 23.ref 和 out 有什么区别 **1.都是按引用类型进行传递** **2.属性不是变量不能作为 out、ref 参数传递** **3.ref 参数必须初始化。out 不需要初始化** **4.作用,当方法有多个返回值时,out 非常有用** #### 24.a.Equals(b)和 a==b 一样吗? **不一样,a==b 仅仅表示 a 和 b 值相等,a.Equals(b)表示 a 与 b 一致** #### 25.下面这段代码求值 ```plain class Class1 { internal static int count = 0; static Class1() { count++; } public Class1() { count++; } } Class1 o1 = new Class1(); Class1 o2 = new Class1(); ``` **o1.count 的值是多少?** **答案:3,静态 构造方法计算一次,两个实例化对象计算两次。** #### 26.关于构造函数说法正确的是哪个? **a)构造函数可以声明返回类型。** **b)构造函数不可以用 private 修饰** **c)构造函数必须与类名相同** **d)构造函数不能带参数** **答案:c ,构造函数必须与类名相同,可以传递多个传递,作用就是便于初始化对象成员,不能有任何返回类型** #### 27.Math.Round(11.5)等於多少? Math.Round(-11.5)等於多少? **Math.Round(11.5)=12** **Math.Round(-11.5)=-12** #### 28.&和&&的区别 **相同点** **&和&&都可作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true 时,其结果才为 true,否则,只要有一方为 false,则结果为 false。(ps:当要用到逻辑与的时候&是毫无意义,&本身就不是干这个的)** **不同点** ··· if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName)) ··· &&具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表达式,对于上面的表达式,当 loginUser 为 null 时,后面的表达式不会执行,所以不会出现 NullPointerException 如果将&&改为&,则会抛出 NullPointerException 异常。(ps:所以说当要用到逻辑与的时候&是毫无意义的) **& 是用作位运算的。** **总结** **&是位运算,返回结果是 int 类型 &&是逻辑运算,返回结果是 bool 类型** #### 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 只需要做一次类型兼容检查**
个人天使
2025年2月12日 17:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码