1:在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
string str =""初始化对象分配空间
而string str=null初始化对象
更详细的解释
这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的。string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,将报错。
02:简述类和结构的相同点和不同点。并用代码举例。
访问修饰符 struct 结构名
{
//结构体
}
访问修饰符 class 类名
{
//代码块
}
相同点:
都可以有字段,也可以有方法
不同点:
定义时,结构中的字段不能被赋初值
结构声明可以不用new ,直接定义结构的对象
声明结构的对象后,必须给结构的成员赋初值
类是引用类型,结构是值类型
03:什么是拆箱和装箱?举例说明
装箱 : 值类型转引用类型;
例:int num = 2;
string str = num.ToString();
拆箱:引用类型转值类型;
例:string str = "2";
int num = Convert.ToInt32(str);
04:编程实现一个冒泡排序
int[] num = { 3, 2, 5, 1 ,4};
for (int i = 0; i < num.Length; i++)
{
for (int j = 0; j < num.Length-1-i; j++)
{
if (num[i]>num[j+1])
{
int item = num[i];
num[i] = num[j+1];
num[j+1] =item;
}
}
}
05:编程实现一个递归方法
public int Num(int nums)
{
if (nums == 2 || nums == 3)
return nums;
else
return Num(nums - 1) + Num(nums - 2);
}
06:说说目前学的集合有哪些?,每一种集合的特点以及使用场景
ArrayList arraylist=new ArrayList();
特点:集合添加的值都会进行装箱处理,应为ArrayList只能添加object类型
取值的时候需要进行类型转换
List<string> list=new List<string>();
新增数据需要进行类型安全验证
获取数据的时候不用去强转
Hashtable hashtable = new Hashtable();
存储的是键值对集合,一个空间放两个值(key,value);
获取数据是不能通过下标取值,所以它只能通过foreach遍历数据;
新增数据不用进行类型安全验证
Dictionary<int, string> pairs = new Dictionary<int, string>();
存储的是键值对集合,一个空间放两个值(key,value),并且要进行类型安全验证;
取值和Hashtable一样
07:变量被标记为 “const” 和readonly” 有何不同?
const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化
const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候
此外const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中。
08:“out” 和 “ref” 参数有何不同?用代码举例
1、ref传进去的参数必须在调用前初始化,out不必,即:
int i;
SomeMethod( ref i );//语法错误
SomeMethod( out i );//通过
2、ref传进去的参数在函数内部可以直接使用,而out不可:
public void SomeMethod(ref int i)
{
int j=i;//通过
//...
}
public void SomeMethod(out int i)
{
int j=i;//语法错误
}
09:“StringBuilder” 和 “String” 有何不同?
对于创建成功的string,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String 实例,在内存中创建新的字符串对象。而StringBuilder 对象是一个可变的字符序列,它不会在内存中创建新的字符串对象;