1.关于位移运算符:
1 1 int i=16; 2 2 3 3 int m=i>>1; 4 4 5 5 Console.WriteLine(i); // 得到m=8; 6 6 7 7 8 8 9 9 int j=2; 10 10 11 11 int n=j<<2; 12 12 13 13 Console.WritLine(j); // 得到n=8; 14 14 15 15 16 16 17 17 byte k=247; 18 18 19 19 byte x=(byte)~k; // ~表示取补,一个byte是255 20 20 21 21 Console.WriteLine(x); // 得到x为8;
2. 冒泡排序:
1 for(int i=0;i<array.Length-1;i++){ // 外部循环表示循环的次数 2 3 for(int j=0;j<array.Length-1-i;j++){ // 内部循环表示比较的次数 4 5 if(array[i]<array[j]){ 6 7 int temp=array[j]; // 替换值 8 9 array[j]=array[i]; 10 11 array[i]=temp; 12 13 } 14 15 } 16 17 } 18 19 // 数组的遍历 20 21 for(int i=0;i<array.Length;i++){ 22 23 Console.WriteLine(array[i]); 24 25 }
3. 创建对象:
String s=new String ("xyz");
其中创建了2个对象; String s=new String(); 和 String s="xyz";
4.委托:
委托可以把一个方法作为参数代入另一个方法;
事件可以看做是一种特殊的委托;
委托可以理解为指向一个函数的引用(指针);
委托可以不带委托名(匿名委托);
委托分为: delegate匿名委托, Func委托, Action委托, lambda表达式;
5.关键字: sealed关键字修饰的类,是密封的,不能被继承;
abstract : 抽象, 由abstract修饰的类叫抽象类,抽象类中可以没有抽象方法;
由abstract修饰的方法叫抽象方法,如果一个类中有抽象方法,那么这个类一定是抽象类;
override:表示对方法的重写;
delegate: 委托的关键字;
event: 事件的关键字;事件可以看成是特殊的委托;
6.as和is:
as和is永远都不会抛出异常;如果对象引用为null;那么is操作符返回为false;
7:staic: 用static修饰的成员称为静态成员.静态成员只能由类来调用;
包含静态成员的类可以不是静态类;
静态类不能被实例化,所以内部只允许有静态成员或const修饰的常量;
有静态构造方法(函数),静态构造方法必须无参,不能重载;
8.关于泛型: 可以最大限度的重用代码,保护类型的安全以及提高性能;
降低了强制转换或装箱操作的成本或风险;
可以对泛型类进行约束以访问特定数据类型的方法;
9.关于集合: Queue先进先出(FIFO)的一种数据结构;
要是用Dictionary时,需要先引用System.Colletions.Generic命名空间;
Stack类实现了ICollection和IEnumberable接口,Stack(栈)先进后出;
List<T>类表示可以用过索引访问的对象的强类型列表;
10.值类型和引用类型的区别:
值类型在栈中分配内存,由系统自动分配;
引用类型储存在堆中,需要程序员自己分配内存空间。指向同一内存空间;
引用类型相互赋值以后,他们共用同一内存空间,相互影响,一个值改变,另一个值也会发生改变;
11.虚函数和抽象函数:
虚函数用 virtual 关键字修饰, 虚函数允许被重写也可以不重写;
抽象函数用 abstract 关键字修饰;必须要要求其继承者者重写,声明时不提供其自身的实现,不能被实例化;
如果一个类中,有用抽象函数,那么这个类一定是抽象类,抽象类中也可以没有抽象函数;
12.ArrayList和List的区别:
ArrayList 不是强类型,效率比List慢,代表了可以被单独所有的对象的有序集合;ArrayList是命名空间System.Collections下的一部分,在使用该类时必须进行引用,
同时继承了IList接口,提供了数据存储和检索。ArrayList对象的大小是按照其中存储的数据来动态扩充与收缩的。所以,在声明ArrayList对象时并不需要指定它的长度。
List是强类型;List类是ArrayList类的泛型等效类,它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。
13.拆箱和装箱:
装箱就是将值类型的数据打包到引用类型的实例中;
int i=123;
Object obj=(Objecte)i;
拆箱就是从引用数据中提取值类型;
int num1=10;
object boj1 = num1;
int b = (int)boj1;
Console.WriteLine (boj1); // 打印结果为10;
13.C#中的interface和class的区别:
接口可以理解成一种特殊的类,由常量和抽象方法组成的特殊类。 接口不能实例化; 接口中的方法没有方法体{};继承接口的类一定要实现接口中定义的方法;
类可以实例化,可以定义自己的字段,属性,方法等等;类可以继承多个接口,但只能继承一个类!
14.new关键字的用法:①.new 运算符:用于创建对象和调用构造函数。
例: Class_Test MyClass = new Class_Test();
②.可以用于泛型 where限制 用于在泛型声明中约束可能用作类型参数的参数的类型。
where:new() new()限制只能用于限制的最后;
③.修饰符,用于隐藏基类成员的继承成员;
注意: 不能重载new运算符;
15.访问级别: ①. public:公有访问,不受任何限制;
②.private:私有访问,只限于本类成员访问,子类,实例都不能访问;
③.protected:保护访问,只限于本类和子类访问,实例不能访问;
④.internal:内部访问,只限于本项目访问,其他不能访问;
⑤.protected internal:内部保护访问:只限于本项目和其子类访问;
16.struct和class的异同:
struct是值类型,创建一个struct类型的实例被分配在栈上。class是引用类型,创建一个class类型实例被分配在托管堆上。
struct实例的赋值,赋的是值,struct作为参数类型传递,传递的是值。class实例的赋值,赋的是引用地址。class作为参数类型传递,传递的是引用地址。
struct的的默认访问权限public,class 的默认访问权限是private。
struct声明的构造函数必须带有参数;而class可以显式声明无参数构造函数。
class支持继承,struct不支持继承,但支持接口。
class偏向于"面向对象",用于复杂、大型数据,struct偏向于"简单值",比如小于16字节,结构简单。
class的成员变量可以在声明的时候赋初值,而在struct声明中,除非字段被声明为 const 或 static,否则无法初始化。