C#基础知识

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,否则无法初始化。

   

    

原文地址:https://www.cnblogs.com/fengjiulin110120/p/6675202.html