-
字符串中string str=null和string str=""和string str=string.Empty的区别?
string.Empty相当于“”,Empty是⼀个静态只读的字段。 string str="" ,初始化对象,并分配⼀个空字符串 的内存空间 string str=null,初始化对象,不会分配内存空间
-
string和StringBuilder的区别,两者性能的⽐较
string和StringBuilder都是引⽤类型,分配再堆上 StringBuilder默认容量是16,可以允许扩充它所封装的字符串中字符的数量.每个StringBuffer对象都有⼀定的缓冲区容量,当字符串⼤⼩没有超过容量时,不会分配新的容量,当字符串⼤⼩超过容量时,会⾃动增加容量。
对于简单的字符串连接操作,在性能上stringbuilder不⼀定总是优于strin因为stringbulider对象的创建也消耗⼤量的性能,在字符串连接⽐较少的情况下,过度滥⽤stringbuilder会导致性能的浪费⽽⾮节约,只有⼤量⽆法预知次数的字符串操作才考虑stringbuilder的使⽤。
从最后分析可以看出如果是相对较少的字符串拼接根本看不出太⼤差别。 Stringbulider的使⽤,最好制定合适的容量值,否则优于默认值容量不⾜⽽频繁的进⾏内存分配操作,是不妥的实现⽅法。
-
什么是扩展⽅法
扩展⽅法使你能够向现有类型“添加”⽅法,⽆需修改类型条件:按扩展⽅法必须满⾜的条件,1.必须要静态类中的静态⽅法2.第⼀个参数的类型是要扩展的类型,并 且需要添加this关键字以标识其为扩展⽅法 建议:通常,只在不得已的情况下才实现扩展⽅法,并谨慎的实现 使⽤:不能通过类名调⽤,直接使⽤类型来调⽤
-
什么是装箱和拆箱?
装箱就是隐式地将⼀个值类型转换成引⽤类型,如:
int i=0; Syste.Object obj=i;
拆箱就是将引⽤类型转换成值类型,如:
int i=0; System.Object obj=i; int j=(int)obj;(将obj拆箱)
-
值类型和引⽤类型的区别
值类型变量是直接包含值。将⼀个值类型变量赋给另⼀个值类型变量,是复制包含的值,默认值是0。引⽤类型变量的赋值只复制对对象的引⽤,⽽不复制对象本身,默认值是null
值类型有整形、浮点型、bool、枚举。引⽤类型有
class
、delegate
、Object
、string
值类型存储在栈中,引⽤类型存储在堆中 -
new 关键字的作⽤ 1、运算符:创建对象实例
2、修饰符:在派⽣类定义⼀个重名的⽅法,隐藏掉基类⽅法
3、约束:泛型约束定义,约束可使⽤的泛型类型,如:
public class ItemFactory<T> where T : IComparable, new() { }
-
int ?和int有什么区别? int? 为可空类型,默认值可以是null,通过int装箱为引⽤类型实现
int默认值是0
-
C# 中的委托是什么?
委托是将⽅法当作参数传⼊另⼀个⽅法的参数。 .net中有很多常⻅的委托如:Func 、Action作⽤:提⾼⽅法的扩展性
-
const和readonly有什么区别?
1、初始化位置不同。const必须在声明的同时赋值;readonly即可以在声明处赋值,也可以在静态构造⽅法(必须是静态构造⽅法,普通构造⽅法不⾏)⾥赋值。
2、修饰对象不同。const即可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段。
3、const是编译时常量,在编译时确定该值;readonly是运⾏时常量,在运⾏时确定该值。
4、const默认是静态的;⽽readonly如果设置成静态需要显示声明
5、修饰引⽤类型时不同,const只能修饰string或值为null的其他引⽤类型;readonly可以是任何类型。
-
ref和out有什么区别
1.都是按引⽤类型进⾏传递
2.属性不是变量不能作为out、ref参数传递
3.ref参数必须初始化。out不需要初始化
4.作⽤,当⽅法有多个返回值时,out⾮常有⽤