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的使⽤,最好制定合适的容量值,否则优于默认值容量不⾜⽽频繁的进⾏内存分配操作,是不妥的实现⽅法。
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.什么是装箱和拆箱?
答:装箱就是隐式地将⼀个值类型转换成引⽤类型,如:
int i=0;
Syste.Object obj=i;
拆箱就是将引⽤类型转换成值类型,如:
int i=0;
Syste.Object obj=i;
int j=(int)obj;(将obj拆箱)
7.值类型和引⽤类型的区别
答:值类型变量是直接包含值。将⼀个值类型变量赋给另⼀个值类型变量,是复制包含的值,默认值是0。
引⽤类型变量的赋值只复制对对象的引⽤,⽽不复制对象本身,默认值是null值类型有整形、浮点型、bool、枚举。
引⽤类型有class、delegate、Object、string
值类型存储在栈中,引⽤类型存储在堆中
8.new关键字的作⽤?
答:运算符:创建对象实例
修饰符:在派⽣类定义⼀个重名的⽅法,隐藏掉基类⽅法
约束:泛型约束定义,约束可使⽤的泛型类型,如:
public class ItemFactory<T> where T : IComparable, new()
{
}
9. int?和int有什么区别?
答:int?为可空类型,默认值可以是null
int默认值是0
int?是通过int装箱为引⽤类型实现
10.C#中的委托是什么?
答:⼀句话解释就是:将⽅法当作参数传⼊另⼀个⽅法的参数。 .net中有很多常⻅的委托如:Func 、Action作⽤:提⾼⽅法的扩展性