C#小知识

1、

启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状

态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()

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

2、

接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可

继承实体类(concrete class)?

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承

实体类,但前提是实体类必须有明确的构造函数。

3、

构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载

Overloading。

4、

是否可以继承String类?

答:String类是final类故不可以继承。

5、

.try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会

不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return前执行。

6、

swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和

case语句的参数应该是 int、 short、 char 或者 byte。long,string 都不

能作用于swtich。

7、

abstract的method是否可同时是static,是否可同时是native,是否可同时是

synchronized?

答:都不能。

8、

List,Set, Map是否继承自Collection接口?

答:List,Set是Map不是

9、

Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是

equals()?它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。

C#提供值类型和引用类型,值类型存储在栈上,故用==判断是直接判断其值是否相等,因为值类型不存在堆中的数据,因此值类型的Equals也是判断数据。即,对于值类型而言,==与Equals相同,均是判断其值是否相等。

对于引用类型而言,其栈中存储的是对象的地址,那么==就是比较两个地址是否相等,即是否指向同一个对象;Equals函数则是比较两个对象在堆中的数据是否一样,即两个引用类型是否是对同一个对象的引用。

String是引用类型,但是按照值类型操作

10、

in out和ref

in,函数中只能读取不能修改

out,函数中不能读取只能修改

ref,函数中可读取,可修改

11、

协变与逆变

协变是变的更具体

逆变是变的更抽象

12、sleep和wait的区别

本文较为详细的分析了C#中sleep和wait的区别。分享给大家供大家参考。具体分析如下:

sleep和wait都是使线程暂时停止执行的方法,但它们有很大的不同。

①. sleep是线程类Thread 的方法,它是使当前线程暂时睡眠,可以放在任何位置。

而wait是Object类的方法,它是使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。

②. Sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是无法访问的。

而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。

③. 线程执行wait方法时,需要另一个线程调用notify进行唤醒。

而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒。

13、

shorts1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式

转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正

确。

14、

shorts1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式

转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正

确。

15、

进程和线程的区别?

答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个

进程可以有多个线程,这些线程共享这个进程的资源。

16、

堆和栈的区别?

答: 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。   值类型

堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆

上。   引用类型

17、

成员变量和成员函数前加static的作用?

答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分

别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数

负责这种统计的动作。不用new 

原文地址:https://www.cnblogs.com/xietianjiao/p/13390159.html