1.int?和int有什么区别

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

 

2.C#中值传递与引⽤传递的区别是什么?

值传递时,系统⾸先为被调⽤⽅法的形参分配内存空间,并将实参的值按位置⼀⼀对应地复制 给形参,此后,被调⽤⽅法中形参值得任何改变都不会影响到相应的实参; 引⽤传递时,系统不是将实参本⾝的值复制后传递给形参,⽽是将其引⽤值(即地址值)传递 给形参,因此,形参所引⽤的该地址上的变量与传递的实参相同,⽅法体内相应形参值得任何 改变都将影响到作为引⽤传递的实参。 简⽽⾔之,按值传递不是值参数是值类型,⽽是指形参变量会复制实参变量,也就是会在栈上 多创建⼀个相同的变量。⽽按引⽤传递则不会。可以通过 ref 和 out 来决定参数是否按照 引⽤传递

3.C#中参数传递 ref 与 out 的区别?

(1)ref指定的参数在函数调⽤时必须先初始化,⽽out不⽤ (2)out指定的参数在进⼊函数时会清空⾃⼰,因此必须在函数内部进⾏初始化赋值操作,⽽ ref不⽤ 总结:ref可以把值传到⽅法⾥,也可以把值传到⽅法外;out只可以把值传到⽅法外 注意:string作为特殊的引⽤类型,其操作是与值类型看⻬的,若要将⽅法内对形参赋值后的 结果传递出来,需要加上ref或out关键字。

4.C#中什么是装箱和拆箱?

装箱:把值类型转换成引⽤类型 拆箱:把引⽤类型转换成值类型 装箱:对值类型在堆中分配⼀个对象实例,并将该值复制到新的对象中。 (1)第⼀步:新分配托管堆内存(⼤⼩为值类型实例⼤⼩加上⼀个⽅法表指针。 (2)第⼆步:将值类型的实例字段拷⻉到新分配的内存中。 (3)第三步:返回托管堆中新分配对象的地址。这个地址就是⼀个指向对象的引⽤了。 拆箱:检查对象实例,确保它是给定值类型的⼀个装箱值。将该值从实例复制到值类型变量 中。 在装箱时是不需要显式的类型转换的,不过拆箱需要显式的类型转换。 int i=0; System.Object obj=i; //这个过程就是装箱!就是将 i 装箱! int j=(int)obj;//这个过程 obj 拆箱!

5.C#中堆和栈的区别?

栈:由编译器⾃动分配、释放。在函数体中定义的变量通常在栈上。 堆:⼀般由程序员分配释 放。⽤new、malloc等分配内存函数分配得到的就是在堆上。 存放在栈中时要管存储顺序,保持着先进后出的原则,他是⼀⽚连续的内存域,有系统⾃动分 配和维护; 堆:是⽆序的,他是⼀⽚不连续的内存域,有⽤⼾⾃⼰来控制和释放,如果⽤⼾⾃⼰不释放的 话,当内存达到⼀定的特定值时,通过垃圾回收器(GC)来回收。 栈内存⽆需我们管理,也不受GC管理。当栈顶元素使⽤完毕,⽴⻢释放。⽽堆则需要GC清理。 使⽤引⽤类型的时候,⼀般是对指针进⾏的操作⽽⾮引⽤类型对象本⾝。但是值类型则操作其 本⾝

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

string.Empty相当于“”,Empty是⼀个静态只读的字段。 string str="" ,初始化对象, 并分配⼀个空字符串的内存空间 string str=null,初始化对象,不会分配内存空间

7.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

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

都是引⽤类型,分配再堆上 StringBuilder默认容量是16,可以允许扩充它所封装的字符串中字符的数量.每个 StringBuffer对象都有⼀定的缓冲区容量,当字符串⼤⼩没有超过容量时,不会分配新的容 量,当字符串⼤⼩超过容量时,会⾃动增加容量。 对于简单的字符串连接操作,在性能上stringbuilder不⼀定总是优于strin因为 stringbulider对象的创建也消耗⼤量的性能,在字符串连接⽐较少的情况下,过度滥⽤ stringbuilder会导致性能的浪费⽽⾮节约,只有⼤量⽆法预知次数的字符串操作才考虑 stringbuilder的使⽤。从最后分析可以看出如果是相对较少的字符串拼接根本看不出太⼤差 别。 Stringbulider的使⽤,最好制定合适的容量值,否则优于默认值容量不⾜⽽频繁的进⾏内存 分

9.什么是扩展⽅法?

扩展⽅法使你能够向现有类型“添加”⽅法,⽆需修改类型 条件:按扩展⽅法必须满⾜的条件,1.必须要静态类中的静态⽅法2.第⼀个参数的类型是要扩 展的类型,并且需要添加this关键字以标识其为扩展⽅法 建议:通常,只在不得已的情况下才实现扩展⽅法,并谨慎的实现 使⽤:不能通过类名调⽤,直接使⽤类型来调⽤

10. 特性是什么?如何使⽤?

特性与属性是完全不相同的两个概念,只是在名称上⽐较相近。Attribute特性就是关联了⼀ 个⽬标对象的⼀段配置信息,本质上是⼀个类,其为⽬标元素提供关联附加信息,这段附加信 息存储在dll内的元数据,它本⾝没什么意义。运⾏期以反射的⽅式来获取附加信息

11.什么叫应⽤程序域(AppDomain)

⼀种边界,它由公共语⾔运⾏库围绕同⼀应⽤程序范围内创建的对象建⽴(即,从应⽤程序⼊ ⼝点开始,沿着对象激活的序列的任何位置)。 应⽤程序域有助于将在⼀个应⽤程序中创建的对象与在其他应⽤程序中创建的对象隔离,以使 运⾏时⾏为可以预知。 在⼀个单独的进程中可以存在多个应⽤程序域。应⽤程序域可以理解为⼀种轻量级进程。起到 安全的作⽤。占⽤资源⼩。

12.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

13.const和readonly有什么区别?

都可以标识⼀个常量。主要有以下区别: 1、初始化位置不同。const必须在声明的同时赋值;readonly即可以在声明处赋值; 2、修饰对象不同。const即可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类 的字段 3、const是编译时常量,在编译时确定该值;readonly是运⾏时常量,在运⾏时确定该值。 4、const默认是静态的;⽽readonly如果设置成静态需要显⽰声明 5、修饰引⽤类型时不同,const只能修饰string或值为null的其他引⽤类型;readonly可 以是任何类型。

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

string strTmp = "a1某某某"; int a = System.Text.Encoding.Default.GetBytes(strTmp).Length; int b = strTmp.Length; 分析:⼀个字⺟、数字占⼀个byte,⼀个中⽂占占两个byte,所以a=8,b=5

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

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

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

C#在unsafe 模式下可以使⽤指针对内存进⾏操作, 但在托管模式下不可以使⽤指针,C#NET 默认不运⾏带指针的,需要设置下,选择项⽬右键->属性->选择⽣成->“允许不安全代码”打 勾->保存

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

强类型是在编译的时候就确定类型的数据,在执⾏时类型不能更改,⽽弱类型在执⾏的时候才 会确定类型。没有好不好,⼆者各有好处,强类型安全,因为它事先已经确定好了,⽽且效率 ⾼。⼀般⽤于编译型编程语⾔,如c++,java,c#,pascal等,弱类型相⽐⽽⾔不安全,在运⾏ 的时候容易出现错误,但它灵活,多⽤于解释型编程语⾔,如javascript等

18.Math.Round(11.5)等於多少? Math.Round(-11.5)等於多少?

Math.Round(11.5)=12 Math.Round(-11.5)=-12

19.&和&&的区别

相同点 &和&&都可作逻辑与的运算符,表⽰逻辑与(and),当运算符两边的表达式的结果都为true 时,其结果才为true,否则,只要有⼀⽅为false,则结果为false。(ps:当要⽤到逻辑与 的时候&是毫⽆意义,&本⾝就不是⼲这个的) 不同点 if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName)) &&具有短路的功能,即如果第⼀个表达式为false,则不再计算第⼆个表达式,对于上⾯的表 达式,当loginUser为null时,后⾯的表达式不会执⾏,所以不会出现 NullPointerException如果将&&改为&,则会抛出NullPointerException异常。 (ps:所以说当要⽤到逻辑与的时候&是毫⽆意义的) & 是⽤作位运算的。 总结 &是位运算,返回结果是int类型 &&是逻辑运算,返回结果是bool类型

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

1.i++是先赋值,然后再⾃增;++i是先⾃增,后赋值。 2.i=0,i++=0,++i=1; Console.WriteLine(++i==i++); 结果位true

21.as和is的区别

as在转换的同时判断兼容性,如果无法进行转换,返回null(没有产生新的对象),as转换是否成功判断的依据是否为null; is只是做类型兼容性判断,并不执行真正的类型转换,返回true或false,对象为null也会返回false as比is效率更高,as只需要做一次类型兼容检查。

22.C#中的委托是什么?事件是不是⼀种委托?

委托的本质是一个类,委托是将一种方法作为参数带入到另一种方法中。 事件是委托的实例,事件是一种特殊的委托。

23.C#静态构造函数特点是什么?

最先被执行的构造函数,且在一个类里只允许有一个无参的静态构造函数 执行顺序:静态变量》静态构造函数》实例变量》实例构造函数

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

CTS:通用类型系统(Common Type System),.NET通过CTS提供了公共的类型,然后翻译成对应的.NET类型 CLS:公共语言运行时(Common Language Runtime)就是GC,JIT等 CLR:比如服务器CLR,相当于一个执行IL的发动机

25.C#中什么是值类型与引⽤类型?

值类型:struct、enum、int、float、char、bool、decimal 引用类型:class、delegate、interface、array、object、string

26.请详述在C#中类(class)与结构(struct)的异同?

class可以被实例化,属于引用类型,可以实现接口和继承其他类,还可以作为基类,是分配在内存的堆上的 struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的

27.new关键字的作⽤

运算符:创建对象实例 修饰符:在派生类定义了一个重名的方法,隐藏掉基类方法 约束:泛型的约束定义,可使用的泛型类型

28.C#实现多态的过程中 overload 重载 与override 重写的区别?

overload是重载,是方法名称相同,参数或参数类型不同,进行多次重载以适应不同的需要 override是对基类中的虚方法进行重写

29.C# 中static关键字的作⽤?

对类有意义的字段和方法使用static关键字修饰,称为静态成员,可以直接通过类名加方位操作符.进行访问;对类的实例有意义的字段和方法不加static关键字,称为非静态成员或实例成员。 静态字段在内存中只有一个拷贝,非静态字段则是在每个实例对象中拥有一个拷贝。而方法无论是否静态,在内存中只会有一份拷贝,区别只是通过类名来访问还是通过实例名来访问。

30.C# 成员变量和成员函数前加static的作⽤?

他们被称作常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数

31.C#中索引器的实现过程,是否只能根据数字进⾏索引,请描述⼀下

C#通过提供索引器,可以像处理数组一样处理对象,特别是属性,每一个元素都以一个get或一个set方法暴露。类索引器不但能索引数字(数组下标),还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以,索引器和返回值无关,索引器最大的好处是使代码看上去更自然,更符合实际的思考模式 微软官方的一个示例: 索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。在下面的示例中,定义了一个泛型类(Class SampleCollection),并为其提供了简单的get和set访问器方法。Program类为存储字符串创建了此类的一个实例。

32.C#中 abstract class和interface有什么区别?

abstract class 声明抽象类抽象方法,一个类中有抽象方法,那么这个类就是抽象类了。所谓的抽象方法,就是不含主体(不提供实现方法),必须由继承者重写。因此抽象类不能实例化,只能通过继承被子类重写。 interface声明接口,只提供一些方法规约,不能用public,abstract等修饰,无字段,常量,无构造函数 两者区别: 1.interface中不能有字段,而abstract class可以有;2.interface中不能有public等修饰符,而abstract class可以有;3.interface可以实现多继承。

33.C#中⽤sealed修饰的类有什么特点?

密封,不能继承

34.谈谈finally的⽤法。

用于异常处理时执行任何清除操作

35.简述C#成员修饰符

abstract:指示该方法或属性没有实现。 const:指定域或局部变量的值不能被改动。 event:声明一个事件。 extern:指示方法在外部实现。 override:对由基类继承成员的新实现。 readonly:指示一个域只能在声明时以及相同类的内部被赋值 static:指示一个成员属于类型本身,而不是属于特定的对象 virtual:指示一个方法或存取器的实现可以在继承类中被覆盖

36.什么是匿名类,有什么好处?

不用定义,没有名字的类,使用一次便可丢弃。好处是简单、随意、临时的

37.说说什么是逐字字符串

在普通字符串中,反斜杠字符是转义字符。而在逐字字符串(Verbatim Strings)中,字符将被编程器按照原义进行解释。使用逐字字符串只需在字符串前面加上@符号。

38.列举你知道的数字格式化转换

可使用“0”和“#”占位符进行补位。"0"表示位数不够位数就补充"0",小数部分如果位数多了则会四舍五入;"#"表示占位,用于辅助"0"进行补位 例如:string.Format("{0:000000}",1234)) 结果:001234 //"0"描述:占位符,如果可能,填充位 string.Format("{0:######}",1234)) 结果:1234 string.Format("{0.#0####}",1234)) 结果:01234 string.Format("{0.0#0###}",1234)) 结果:0001234 string.Format("{0:000.000}",1234)) 结果:1234.000 string.Format("{0:000.000}",4321.12543)) 结果:4321.125 string.Format("{0:0,0}",1234567)) 结果:1,234,567 //千分表示 string.Format("{0:0%}",1234 结果:123400% //格式化为百分数 内置字母格式化用法

39.说说字符串拼接、字符串内插法

40.什么是虚函数?什么是抽象函数?

虚函数:没有实现的,可以由子类继承并重写的函数。 抽象函数:规定其非虚子类必须实现的函数,必须被重写。

41.什么是WebService?

Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

42.ADO.NET常⽤对象有哪些?

43.在ASP.NET中所有的⾃定义⽤⼾控件都必须继承⾃?

44.在.NET托管代码总我们不必担⼼内存泄漏,这是因为有了?

45.什么是MVC模式

46.能⽤foreach遍历访问的对象的要求

47.什么是反射?

48.ORM中的延迟加载与直接加载有什么异同?

49.简述Func与Action的区别?

50.23种设计模式分别叫什么名称,如何分类?

51.数组和集合的区别

52.向对象的三⼤特征是什么?/⾯向过程和⾯向对象的区别

53.C#中,is和as有什么区别?

54.列举ASP.NET⻚⾯之间传递值的⼏种⽅式

55.C#中,数组和集合有什么区别?

56.C#中,如何对⽂件进⾏创建、读取、写⼊和删除等操作?会⽤到什么类,什么⽅法? 57.C#中,⽂件夹创建、读取和删除⽤到什么类,什么⽅法?

58.现在有⼀个List集合,需要对数据进⾏过滤以及分组,需要⽤到什么知识点,以及哪 些⽅法?

59.什么是匿名类型?在LINQ中如何使⽤它们?

60.请⽤Linq⼿写⼀个分⻚功能,假设pageIndex=1,pageSize=10 

posted on 2025-06-14 11:20  江渔湖  阅读(20)  评论(0)    收藏  举报