目录
1.1. 字符串中string str=null和string str=""和string str=string.Empty的区别?
1.2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 这些变量有些错误是错再哪⾥?
1.3.string和StringBuilder的区别,两者性能的⽐较
1.13.现有⼀个整数number,请写⼀个⽅法判断这个整数是否是2的N次⽅
1.17.Strings = new String(“xyz”);创建了⼏个String Object?
1.20.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
1.27.Math.Round(11.5)等於多少? Math.Round(-11.5)等于多少?
2.7.接⼝是否可继承接⼝?抽象类是否可实现(implements)接⼝?抽象类是否可继承实现类(concrete class)?
2.15.在项⽬中为什么使⽤接⼝?接⼝的好处是什么?什么是⾯向接⼝开发?
2.19.C#中 property 与 attribute的区别,他们各有什么⽤处,这种机制的好处在哪⾥?
2.20.当使⽤new B()创建B的实例时,产⽣什么输出?
2.21.能⽤foreach遍历访问的对象需要实现 接⼝或声明⽅法的类型
1.基础语法
1.1. 字符串中string str=null和string str=""和string str=string.Empty的区别?
string.Empty相当于“”,Empty是⼀个静态只读的字段。 string str="" ,初始化对象,并分配⼀个空字符串的内存空间 string str=null,初始化对象,不会分配内存空间。
1.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。
1.3.string和StringBuilder的区别,两者性能的⽐较
都是引⽤类型,分配再堆上StringBuilder默认容量是16,可以允许扩充它所封装的字符串中字符的数量.每个StringBuffer对象都有⼀定的缓冲区容量,当字符串⼤⼩没有超过容量时,不会分配新的容量,当字符串⼤⼩超过容量时,会⾃动增加容量。
对于简单的字符串连接操作,在性能上stringbuilder不⼀定总是优于strin因为stringbulider对象的创建也消耗⼤量的性能,在字符串连接⽐较少的情况下,过度滥⽤stringbuilder会导致性能的浪费⽽⾮节约,只有⼤量⽆法预知次数的字符串操作才考虑stringbuilder的使⽤。从最后分析可以看出如果是相对较少的字符串拼接根本看不出太⼤差别。
Stringbulider的使⽤,最好制定合适的容量值,否则优于默认值容量不⾜⽽频繁的进⾏内存分配操作,是不妥的实现⽅法。
1.4.什么是扩展⽅法?
⼀句话解释,扩展⽅法使你能够向现有类型“添加”⽅法,⽆需修改类型。
- 条件:按扩展⽅法必须满⾜的条件,1.必须要静态类中的静态⽅法2.第⼀个参数的类型是要扩展的类型,并且需要添加this关键字以标识其为扩展⽅法。
- 建议:通常,只在不得已的情况下才实现扩展⽅法,并谨慎的实现
- 使⽤:不能通过类名调⽤,直接使⽤类型来调⽤。
1.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。
1.6.什么是装箱和拆箱?
装箱就是隐式地将⼀个值类型转换成引⽤类型,如:
int i=0;
Syste.Object obj=i;
拆箱就是将引⽤类型转换成值类型,如:
int i=0;
System.Object obj=i;
int j=(int)obj;(将obj拆箱。
1.7.值类型和引⽤类型的区别
- 值类型变量是直接包含值。将⼀个值类型变量赋给另⼀个值类型变量,是复制包含的值,默认值是0。
- 引⽤类型变量的赋值只复制对对象的引⽤,⽽不复制对象本身,默认值是null 值类型有整形、浮点型、bool、枚举。
- 引⽤类型有class、delegate、Object、string 值类型存储在栈中,引⽤类型存储在堆中。
1.8.new关键字的作⽤?
运算符:创建对象实例
修饰符:在派⽣类定义⼀个重名的⽅法,隐藏掉基类⽅法
约束:泛型约束定义,约束可使⽤的泛型类型,如:
public class ItemFactory<T> where T : IComparable, new()
{
}
1.9. int?和int有什么区别?
int?为可空类型,默认值可以是null int默认值是0
int?是通过int装箱为引⽤类型实现
1.10. C#中的委托是什么?
⼀句话解释就是:将⽅法当作参数传⼊另⼀个⽅法的参数。 .net中有很多常⻅的委托如:Func 、Action 作⽤:提⾼⽅法的扩展性。
1.11.⽤最有效的⽅法算出2乘以8等于⼏?
位运算是最快,使⽤的是位运算 逻辑左位移<<。 ⽅法是2<<3相当于0000 0000 0000 0010 (2的16位int⼆进制)左移三位就是 0000 0000 0001 0000(16的⼆进制)。
1.12.const和readonly有什么区别?
都可以标识⼀个常量。主要有以下区别:
初始化位置不同。const必须在声明的同时赋值;readonly即可以在声明处赋值,也可以在静态构造⽅法(必须是静态构造⽅法,普通构造⽅法不⾏)⾥赋值。
修饰对象不同。const即可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段
const是编译时常量,在编译时确定该值;readonly是运⾏时常量,在运⾏时确定该值。
const默认是静态的;⽽readonly如果设置成静态需要显示声明
修饰引⽤类型时不同,const只能修饰string或值为null的其他引⽤类型;readonly可以是任何类型。
1.13.现有⼀个整数number,请写⼀个⽅法判断这个整数是否是2的N次⽅
4(100)、5(101)、8(1000)、16(10000)
取模运算: ⽤number%2==0可以判断,但是这个有点低级
位运算:(使⽤位运算逻辑并,两个位上的都为1才是1,其余都是0,判断是否等于0) 4&3相当于100&011 ,结果是000等于0,所以4是2的n次⽅,5&4相当于101&100,结果是100不等于0,所以5不是2的n次⽅如果要问如果是2的N次⽅,这个N是多少?这该怎么算?
private static byte get(int n)
{
byte number = 1;
while (n/2!=1)
{
n = n / 2;
number += 1;
}
return number;
}