C# 面试题

一、class 和 struct 的区别

class 可以被实例化 属于引用类型
struct 属于值类型

二、C#中类成员有哪些修饰符
1、private 私有的在类内部才能访问
2、public 公共的,没有访问限制
3、internal 在同一程序集中才能访问
4、protected 保护成员,在改类内部和继承类中才被使用

三、面向对象的特征

封装 继承 多态
面像过程方面讲
封装就是将一段代码封装为可以让其他使用的方法
继承将某些公共类,封装起来,可以被其他类调用
多态,通过继承实现的不同对象,调用相同的方法,产生不同的执行结果
面向对象方面讲
面向对象就是将问题拆分成不同的对象,可以通过抽象来解决问题。

四、抽象类和接口的区别
接口:
支持多继承,
只能定义抽象规则
支持回调
包含方法,属性,事件的签名,但不能定义字段和实现的方法。
抽象类:
不支持多继承,
可以定义规则,也可以提供定义的实现。
不能实现回调,因为继承不支持
可以定义字段,属性,和实现的方法。

五、什么是拆箱和装箱?
从值类型转换到引用类型是装箱,从引用类型转换成值类型是拆箱。

六、哪些类型是值类型,哪些类型是引用类型
值类型:int bool 枚举 可控类型
引用类型:数组,委托,接口,object,字符串,类;

七、引用类型和值类型的区别
值类型:占用空间固定,保存和复制时值类型的本身;
引用类型:占用空间不固定,保存和复制是值对象的一个指针,使用new()方法构造出的对象是引用类型。

八、重写和重载的区别
重载:同类同名不同参,输入编译时多态,重载是一个类中定义多个方法名相同的方法,表示一个行为多个实现方式。
重写:使用子类的方法重写父类的方法表示相同的方法在父类和子类中的差异性。

九、构造函数是否可以被继承,是否可以被重写?

构造函数不能被继承,不能被重些,但是可以被重载。

十、ref和out的修饰方法参数有什么区别
out 在使用时不需要初始化,在方法内部不能直接使用,在方法返回前必须对其赋值;
ref 在使用时需要初始化,在方法内部可以使用也可以不使用;


十一、yieId 什么作用
使用yieId在计算时每产生一个元素就先返回数据,不需要等到整个集合计算完成在返回
yieId 不能出现在不安全的代码块中,不能出现ref或者out中。

、string和stringBuilder 的区别
string 对象时恒定不变的,stringBuilder对象表示的字符时可变的,stringBuilder是net 提供的动态创建string的高效方式。
在简单字符串的方法上stringBuilder不一定优于string,因为stringBuilder对象创建代价比较大,在字符串较少的情况下使用stringBuilder会导致性能浪费,只有大量或者无法预知长度的情况下使用stringBuilder优于string。

、如何避免sql注入?
1、参数化
2、通过过滤关键字的方式。

、在不声明变量的情况下讲a=62,b=63,计算a-b=1
使用^异或运算符,异或运算,就是把两个数字先转为二进制数。然后把二进制数的每一位进行比较,相同为0,不同为1
如下 :
int a=62;
int b=63;
a=a^b; a=1二进制转出时
b=a^b; b=62
a=a^b; a=63

a-b=1;

、在net中接口、类、抽象类、有什么不同
抽象类是一个不完整的类,需要进一步的细化,接口是一个行为规范的可以被多重实现,抽象类只能被单一继承,接口可以多继承。

:写出c#中4中循环结构语法
while循环,do while循环,for循环,foreach循环

十七:线程和进程有什么区别
进程是比线程大的程序的运行单元,一个程序最少由一个进程,一个进程中最少一个线程,线程的划分尺度要比进程小,进程拥有独立的内存单元,线程是共享内存,及同一个进程中有多个线程可以并发执行。

十八:Task和Thread的区别

1、Task可以返回结果,没有直接的机制从线程返回结果。

2、task可以使用令牌支持取消,thread没有。

3、一个task可以同时执行多个线程,一个thread只能运行一个task。

4、可以使用 async和await关键字实现异步。

5、新的Thread不处理线程池线程,而Task使用线程池线程。

6、task比thread的概念层次要高。

 

posted @ 2023-03-13 20:13  帅呆了的帅哥哥  阅读(195)  评论(0编辑  收藏  举报