01:在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
string str= " ",表示一个空串,被实列化了,占用了内存空间;
string str=null,表示一个空引用,没有占用了空间。
02:简述类和结构的相同点和不同点。并用代码举例。
相同点:都有属性和方法;和类一样可以继承自接口
不同点:
- 1.关键字不同 一个是class,一个是struct;
2.类型不同,一个是引用类型,一个是值类型;
3.成员不同,结构体没有默认的构造函数(可以添加)和没有析构函数,不可以使用abstract,protected,sealed修饰;
4.Struct变量使用完之后就自动解除内存分配,Class实例有垃圾回收机制来保证内存的回收处理;
5.继承性。结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口;
6.在结构体中可以声明字段,但是声明字段的时候是不能给初始值的.;
7.实体类中如果我们没有显示的定义构造函数,那么会有一个隐式无参的构造函数(重载构造函数之后,需要显示声明无参构造函数),而在结构体中隐身无参的构造函数无论如何都存在;
8.在类中可以显示的定义无参的构造函数,而在结构体中我们不能显示的定义无参的构造函数;
9.结构体是可以New的,而结构体构造函数要求必须要为所有的字段赋值.即使是无参的构造函数,也会给值类型赋初值为0,引用类型赋初值为null。 -
//定义类的语法 class Class1 { private string name; private int age; public void SayHi() { Console.WriteLine("Hello,My Name is " + this.name + ",My Age is " + this.age); } }
//定义结构的语法. struct Rectangle { private int width; private int height; public int GetArea() { return this.width * height; } }
03:什么是拆箱和装箱?举例说明
值类型和引用类型的相互装换——值类型到引用类型叫装箱,反之就叫拆箱。
int a =9;
Object b =(object) a;//装箱
a=(int)b;//拆箱
04:编程实现一个冒泡排序
int temp = 0;
int[] arr = {23, 44, 66, 76, 98, 11, 3, 9, 7};
for (int i = 0; i < arr.Length - 1; i++)
{
#region将大的数字移到数组的arr.Length-1-i
for (int j = 0; j < arr.Length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
Console.WriteLine("排序后的数组:");
foreach (int item in arr)
{
Console.Write(item+"");
}
Console.WriteLine();
Console.ReadKey();
05:编程实现一个递归方法
static void Main(string[] args)
{
//计算5天
Console.WriteLine("最终值" + FunFor(5));
Console.ReadKey();
}
//For语句
static int FunFor(int date)
{
int sum = 0;
for (int i = 1; i <= date; i++)
{
sum += i;
Console.WriteLine(i);
}
return sum;
}
//递归函数
static int FunRecursion(int date)
{
Console.WriteLine(date);
if(date == 0)
{
return 0;
}
else
{
return FunRecursion(date-1) + date;
}
}
06:说说目前学的集合有哪些?,每一种集合的特点以及使用场景
ArrayList,List,Hashtable,Dictionary<key,value>
ArrayList和List获取,删除元素是通过下标或对象名获取;
Hashtable,和Dictionary<key,value>获取,删除元素是通过key获取。
List和Dictionary<key,value>访问元素无须转换。
07:变量被标记为 “const” 和readonly” 有何不同?
const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化 ;
08:“out” 和 “ref” 参数有何不同?用代码举例
- 调用带ref关键字的函数,必须对 ref 对应的参数赋值;而out关键字不需要。
- 带ref 关键字的函数内部可以直接使用 ref 对应的参数;out 关键字的函数,必须在函数内部对out对应的参数赋值后才能使用
09:“StringBuilder” 和 “String” 有何不同?
String表示“字符串”,可以直接赋值一个字符串,它内部是“不可变的”;
StringBuilder表示”字符串的工具类”,专门用于“拼接字符串”,它内部是“可变的”