1.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
string str =""初始化对象分配空间
而string str=null初始化对象
更详细的解释
这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的。string
str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,将报错。
2.简述类和结构的相同点和不同点。并用代码举例。
相同点:
都可以有字段,也可以有方法
如:
public class Student
{
public int ID { get; set; }
public int Age { get; set; }
}
public struct Student2
{
public int ID { get; set; }
public int Age { get; set; }
}
不同点:
(1):不可以new,直接定义结构的对象即可。
(2):声明结构的对象后,必须给结构的成员赋值。
public struct Student
{
public int Id;
public int Age;
public void Show()
{
Console.WriteLine("Id:{0}\n年龄:{1}",Id,Age);
}
static void Main(string[] arge)
{
Student stu;
stu.Id=1001;
stu.Age=16;
stu.Show();
}
}
3.什么是拆箱和装箱?举例说明
(1)装箱是将值类型转换成引用类型的过程。如:
static void Main(string[] args)
{
int i = 123;
object o = i;
i = 456;
Console.WriteLine("值类型值为:{0}",i);
Console.WriteLine("引用类型为:{0}",o);
Console.ReadLine();
}
(2).拆箱是将引用类型强转为值类型
static void Main(string[] args)
{
int i = 123;
object o = i;
int j = (int)o;
Console.WriteLine("值类型值为:{0}",i);
Console.WriteLine("引用类型为:{0}",o);
Console.ReadLine();
}
4:编程实现一个冒泡排序
static void Main(string[] args)
{
Sort();
}
public static void Sort()
{
int[] array={0, 8, 2, 3, 4, 9, 6, 7, 1, 5}
Console.WriteLine("原数组:");
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i]);
}
Console.WriteLine();
//交换
for (int i = 0; i < array.Length - 1; i++)
{
for (int j = i + 1; j < array.Length; j++)
{
if (array[j] < array[i])
{
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
//新数组
Console.WriteLine("新数组:");
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i]);
}
Console.WriteLine();
Console.ReadLine();
}
5:编程实现一个递归方法
public static int DiGui(int n)
{
if (n == 1)
return n;
return DiGui(n - 1) * n;
}
static void Main(string[] args)
{
DiGui(5);
}
6:说说目前学的集合有哪些?,每一种集合的特点以及使用场景
(1)ArrayList
特点:可以动态维护,它提供了一些方法对其中的元素进行访问,增加和删除操作。
使用场景:储存数据时。
(2)Hashtable
特点:Hashtable的数据是通过键(key)和值(value)来组织的,所以可以通过键和值来获取据。另外编码也很容易。
使用场景:(1)并发场景可以使用Hashtable,(2)Hashtable也要注意防止put null key和 null value。
(3)List
特点:
表示泛型,T是TYPEd的简写,表示当前不确定类型。
可以根据用户实际需要,确定当前集合需要存放的数据类型,一旦确定不可改变。
使用Add方法可以随意添加元素,没有个数限制。
使用Remove方法可以删除指定元素,元素删除后索引自动调整。
通过索引访问元素
使用场景:如果您的使用模式很少需要删除和大量添加,而重要的是保持集合的顺序时使用
(4)Dictionary
特点:1.对所保存元素进行类型约束。2.添加/读取值类型元素无须装拆箱
使用场景:如果需要非常快地添加、删除和查找项目,而且不关心集合中项目的顺序
7:变量被标记为 “const” 和readonly” 有何不同?
1)const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化
2)const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候
8:“out” 和 “ref” 参数有何不同?用代码举例
out代码实例:
static void Main(string[] args)
{
string str = "初始化赋值";
MethodOut(out str);
Console.ReadKey();
}
/// <summary>
/// 只出不进 原来out参数在进入方法的时候,C#会自动清空它的一切引用和指向,所以在上面的out例子中,必需先要为str参数赋值
/// </summary>
/// <param name="str"></param>
public static void MethodOut(out string str)
{
str = "Hello World! ---out";
Console.WriteLine(str);
}
ref代码实例:
//ref参数的参数必须最先初始化,
static void Main(string[] args)
{
string str = "初始化赋值";
MethodRef(ref str);
Console.ReadKey();
}
/// <summary>
/// 是有进有出 ref参数在使用前必需初始化,而out不需要。
/// </summary>
/// <param name="i"></param>
public static void MethodRef(ref string str)
{
str = "Hello World! --Ref";
Console.WriteLine(str);
}
9:“StringBuilder” 和 “String” 有何不同?
string 对象时恒定不变的,stringBuider对象表示的字符串是可变的。stringBuilder是.net提供的动态创建string的高效方式,以克服string对象恒定性带来的性能影响。