1、short s=1;s=s+1;有错么?short s=1;s+=1;有错么?
答:short s=1;s=s+1;
这句不会通过编译(类型转换错误),因为s+1,其中1为int型,而s会隐式转换为int再和1进行运算,运算结果自然是int,而int则无法隐式转换回short,所以这里是错的。
short s=1;s+=1;
这句是则不会报错,因为s+=1,相当于s=(short)(s+1),在运算后赋值前进行了显式类型转换。
2、产生一个int数组,长度为100,并向其随机插入1-100,并且不能重复(要求使用两种方法)。
答://方法一
List<int> list = new List<int>();
Random rand = new Random();
while (list.Count < 100)
{
int num = rand.Next(1, 101);
if (!list.Contains(num))
{
list.Add(num);
}
}
//方法二
int[] arr = new int[100];
for (int i = 0; i < 100; i++)
{
arr[i] = i + 1;
}
Random rand1 = new Random();
for (int i = 0; i < 100; i++)
{
int m = rand1.Next(0, 100);
int n = rand1.Next(0, 100);
int temp = arr[m];
arr[m] = arr[n];
arr[n] = temp;
}
3、C#中的委托是什么?事件是不是一种委托?事件和委托的关系。
答:委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的指针。
委托是类型,事件是对象。
事件的内部是用委托实现的,对于事件来讲,外部只能注册自己(+=)和注销自己(-=)。
事件内部就是一个private的委托和add(+=)、remove(-=)两个方法。
4、属性和字段的区别是什么?
答:属性可以对值的获取和设置进行控制,而字段不能。
一般情况下get读取的值就是set设置的值。
如果只有get,则说明值是只读。
如果只有set,则说明值是只写。
get和set的本质是就是内部方法。
5、C#的接口和类有什么异同?
答:不同点:
不能直接实例化接口。
接口不包含方法的实现。
接口可以继承,类只能单继承。
类定义可在不同的源文件之间进行拆分。
相同点:
接口、类和结构都可以从多个接口继承实现。
继承接口的任何非抽象类型都必须实现接口的所有成员。
接口和类都可以包含事件、索引、方法和属性。