C#基础小题

一、是否使用过委托以及何时使用委托?

委托是将方法作为参数进行传递,将一个方法带入另一个方法,相当于指向函数的指针。

委托是给调用者使用,在调用者不知道何时使用的情况下会使用委托(但是调用者要提前订阅自己的代码),当委托对象接收到订阅者的触发消息后会通知调用者。

二、是否使用过匿名委托和lambda表达式?

采用匿名方法实例化的委托称为匿名委托。

lambda表达式本质上是改进的匿名委托。

三、使用多线程时应注意什么?

1.字线程不能直接对主线程的UI控件进行更改,可以对主线程中的自定义对象进行调用。

2.多线程同时访问一个资源时,需要注意同步,可以采用互斥加锁、阻塞(Sleep)以及join进行同步操作。

线程同步的三种方式:阻塞(Sleep)、join以及互斥操作;使用信号量控制,可以采用AutoResetEvent 和ManualResetEvent初始化信号量,调用set和reset方法改变信号量的状态,调用waitone方法让线程进行阻塞。

四、C#和.NET的区别。

.NET一般指.NET FrameWork框架,它是一种平台和一种技术。

C#是一种高级编程语言,可以基于.NET的应用。

五、C#中的委托是什么?事件是不是一种委托?

C#中的委托是将一个方法作为参数带入另一个方法,可以将委托理解为指向一个函数的引用。

事件是一种委托,是一种特殊的委托。

六、CTS、CLS、CLR分别作何解释?

CTS:通用语言系统;

CLS:通用语言规范;

CLR:公共语言运行库。

七、什么是装箱和拆箱?

装箱:将值类型转换为引用类型;

拆箱:将引用类型转换为值类型。

八、什么是受管制的代码?

unsafe:非托管代码,不经过CLR运行。

九、什么是强类型系统?

RTTI(类型识别系统)。

十、.NET中读写数据库需要用到那些类?它们的作用?

DataCommand:执行语句命令;

DataSet:数据存储器;

DataAdapter:数据的集合,用语填充。

十一、C#中,string qtr = null 和string qtr = ""的区别?

qtr=null是不给其分配内存空间;

qtr=""给它分配长度为空字符串的内存空间。

十二、.NET中class与struct的异同?

class可以被实例化,属于引用类型,分配在内存堆上;

struct属于值类型,分配在内存栈上。

十三、.NET下remoting和webservice两项技术的理解。

remoting可以利用TCP/IP,二进制传送提高效率;

webservice主要是可以利用HTTP,穿透防火墙。

十四、能用foreach遍历访问的对象需要实现什么接口或者声明方法?

实现接口:IEnumerable ;

声明方法: GetEnumerator。

十五、GC是什么?为什么需要GC?

GC是垃圾回收器。程序员不需要担心内存管理,垃圾收集器会自动对内存进行管理。

请求垃圾收集器,可以调用如下的方法之一:

System.gc()
Runtime.getRuntime().gc()

十六、String str = new String("QML")创建了几个String Object?

创建了两个对象。一个对象为"QML",另一个为指向"QML"的引用对象str。

十七、启动一个线程是使用run()还是start()?

启动一个线程是使用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行,这并不意味着线程会立即运行。

run()方法可以产生必须退出的标志来停止一个线程。

十八、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

接口可以继承接口;

抽象类能够实现接口;

当所继承的实体类中有明确的构造函数时,抽象类可以继承实体类。

十九、构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能被重写,但是可以被重载。

二十、是否可以继承String类?

String类属于final,因此不能被继承(C#中sealed所修饰的类也不能被继承)。

二十一、try{}里面有一个return语句,那么紧跟在这个try后面的finally{}语句是否会执行?若执行,什么时候执行,是在return之前?还是之后?

紧跟在try后面的finally{}语句会被执行,是在return之前被执行。

二十二、两个对象值相同(a.equals(b)==true),但却有不同的hash code,这句话是否正确?

这句话不正确,它们有相同的hash code。

二十三、switch是否能作用在byte上?是否能作用在long上?是否能作用在String上?

switch(exp)中的exp为一个表达式。因此传递给swicth和case语句的参数应该是int、short、char、byte;long和String都不能作用于switch。

二十四、abstract的method是否可同时是static?是否可同时是native?是否可同时是synchronized?

都不能。

二十五、List、Set和Map是否都是继承与Collection接口?

List和Set是继承与Collection接口;Map不是继承与Collection接口。

二十六、Set里的元素是不能重复的,那么是用什么方法来区分重复?是用==区分?还是使用equals()来区分?它们有什么区别?

Set里的元素是不能进行重复的,使用iterator方法来区分重复。

equals()是判断两个Set是否相等。

equals()和双等是决定引用值是否指向同一对象;equals方法在类中被覆盖,当两个分离对象的内容和类型相匹配时,返回真值。

二十七、数组中是否有Length()方法?String类中是否有length()方法?

数组中没有Length()方法,有Length属性。

String类中有Length()方法。

二十八、sleep()和wait()方法有什么区别?

sleep()方法是让线程停止一段时间。在sleep时间间隔期满后,线程不一定立即恢复执行。因为在这个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非有:1.“醒来”的线程具有更高级别的优先级;2.正在运行的线程因为其它原因而阻塞。

wait()方法是线程交互时,如果线程对一个同步对象A发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,知道被唤醒或等待时间到。

二十九、short a = 1; a = a + 1;有什么错?short b = 1; b += 1;有什么错?

short a = 1; a = a + 1;有错,因为a是属于short类型,而a + 1是属于整型,不能显示转化为short类型,可修改为a = (short)(a + 1);

short b = 1; b += 1;正确。

三十、重载与重写的区别?

方法的重载是一个类中方法之间的关系,是水平关系。方法的重载是多个方法之间的关系。

方法的重写是父类与子类之间的关系,是垂直关系。重写只能由一个方法或者一对方法产生关系。

三十一、Overloaded方法是否可以改变返回值的类型?

是可以改变返回值的类型。

猜你喜欢

转载自blog.csdn.net/weixin_57062986/article/details/131846607