C#基础知识

【C#基础知识】

1.class

定义:类是实现面向对象的基石

[附加声明]    [修饰符]   class  类名称 [:【基类 】[ , 接口序列] ]  //interface可以继承多个用逗号隔开

{                                                                                     //基类与类的关系是“父子关系”

[ 字段声明 ]

[ 构造函数 ]

[ 方法 ]

[ 事件 ]

}

2.构造函数---<#代表可选>

定义:一个类中最少有一个构造函数(没有系统会自动提供);不包含返回值;总是与类同名;

用于对象初始化;默认是public ,假如用 private修饰将不能初始化,一般用于静态类。

 

[ 修饰符]  类名称 ( #[类型]  变量名 ) {  }  // public Myclass ( string  name  ){ } 默认是不带参数,自己重写的时候可以添加。

Myclass  mc = new  Myclass()  // 要调用类中的成员,new的就是构造函数。

 

3.数据类型

3.1 整型,浮点型,布尔型,字符类型,字符串类型

 

  dynamic  s = ?Type(编译时识别类型)

3.2常量与变量

【常量】const   :  声明时赋值、赋值后不可变

              readonly  :  ”只读常量“  程序运行期间只能初始化一次 。加static 修饰等同与const

            public  readonly  int a = 3;

public readonly int   b ;    public Main(){   b = “aaa” ; }  //初始化赋值,初始化后不可变

【变量】public static int  x   //静态变量

int  y  //实例变量

void Func( int[ ] arr , int a, ref int  b, out int c  ){ } //数组元素、参数值,引用参数、输出参数

【匿名类型的变量】

Class  MyClass {

      public string name { get; set; }    public  int age{ get; set; }

}

MyClass  mc = new MyClass();  //其他类调用赋值

mc.name="壮士" ;   mc.age=18;

使用匿名类型来实现只要一句:  var mc =  new  { name="张三",age=18 }; //编译器判断赋值的类型

 

3.3数组

//一维数组,C#提供快速排序静态方法。升序 Array.Sort(book);  Array.Reverse(book);

string[ ] book= { "C#","Java","C++","PHP" };  //查找 book.contains("C#");

Int [ ,] stud= new  Int [2,3] { {1,2,3},{4,5,6}  }  //二维数组

 

3.4泛型集合

//双向链接列表可以在集合的两头添加数据,或者在指定位置的后面添加

LinkedList<T>  ll=  new LinkedList<T>( book )   //有方法:  AddFrist、AddLast、AddAfter

LinkedListNode<T>  current =   ll.Find("b")  //找到指定的链表节点

ll.AddAfater(current," 在b后面添加")

 

知识扩展: 方法---<ref 传递引用 与 out 传递值>

[修饰符]  [附加声明]  [返回类型]  [方法名称] ( # [类型]  变量名) {  }

//[附加声明] 可以是--> 基类: virtual   扩展类:override ; static 静态类

方法中的参数传递

<a>. 参数类型  参数名 // public void GetAge( int a ){ a++; }  a分配了内存空间,值的变动只在分配中变动。

<b>. ref 参数类型 参数名 // public void GetAge( ref int a) {a++}// ref  a是引用类型地址,所有没有分配内存。

// public void GetAge( out int a,out int b) {a=10 ; b=100}  //return 只能返回一个结果,用out可以返回多个结果 引用参数是用来输出的,且调用该参数不用初始化。

<c>. out 参数类型  参数名

例1:Myclass类中有 GetAge方法

    int  old= 10;

    mc .GetAge(old)//调用方法  ref old   out old

console.WriteLine(old)//<a>普通参数传递,调用后还是10; <b>把引用地址传入,调用后自然是11

 

例2:Myclass类中有 GetAge方法

    int  old,young;  //参数不用初始化

    mc .GetAge(out old ,out young) //调用方法  ref old   out old

console.WriteLine(old+"与"+young) //<c>返回方法固定的值 10 ,100

 

4.static静态修饰符

1.可以修饰类、字段、属性、方法

2.标记为static的对象就不要实例话,直接调用。//className.fun()

3.定义的静态类不可以被new,劝包括静态成员,不能被继承,只能是静态构造函数。

 

5.[委托5步曲]

两种用途: 其一CallBack回调机制,其二是事件处理

1步.定义方法:

public static string Func(string name)

{

return "我是方法"+name

}

2步: 准备委托类型

 

delegate <返回类型> 方法名(<函数参数>)

   例 :public delegate void method( int number);//没有返回值

public delegate string MyDelegate();//string返回类型

 

 委托也相当与一个类,把方法做为参数传给方法

3步:定义委托变量

  MyDelegate myDele;

 

4步:授权方法[定义好的方法],想要那个方法给那个方法;

  模型:<委托类型> <实例化名称> =<注册函数>

  简化:myDele=Func;

5步:调用方法;

 myDele("名字"); //传name参数进去

 

5.1【委托种类】:[不带参数委托],[带参数委托],[多播委托]

自定义的委托都继承自基类System.Delegate,在这个类中,定义了大部分委托的特性。

 

多播委托:在1步时:定义一个类里面装多个放,然后迭代每一个方法,以最后一个方法输出。

              在4步时一次授权:

              myDele=Func ;myDele += Fun1;myDele += Fun2;..........

 链式委托也被称为“多播委托”,其本质是一个由多个委托组成的链表。回顾上面1.2中的类结构,System.MulticastDelegate类便是为链式委托而设计的。当两个及以上的委托被链接到一个委托链时,调用头部的委托将导致该链上的所有委托方法都被执行

链上委托方法执行循序可以改变吗?GetInvocationList()方法

    // 申明委托并绑定第一个方法     TestMulticastDelegate tmd = new TestMulticastDelegate(PrintMessage1);     // 绑定第二个方法     tmd += new TestMulticastDelegate(PrintMessage2);     // 绑定第三个方法     tmd += new TestMulticastDelegate(PrintMessage3);     // 获取所有委托方法Delegate[] dels = tmd.GetInvocationList();

多播委托带有返回值时,只得到了最后一个方法的返回值。

 解决方法还是用上面的GetInvocationList()方法,读取出来进行遍历

    GetStringDelegate myDelegate1 = GetDateTimeString;     myDelegate1 += GetTypeNameString;     myDelegate1 += GetSelfDefinedString;     foreach (var del in myDelegate1.GetInvocationList())     {           Console.WriteLine(del.DynamicInvoke());      }

 

【字符集处理】

windows下支持:ANSI(中国GBK) ,unicode,unincode big endin ,utf-8

使用:编码解析(gb2312)十进制

Encoding.default//默认编码就是ANSI

两个方法:Encoding.GetEncoding();//返回Encoding对象

                 Encoding.GetEncodings(); //返回EncodingInfo[] 对象

【FileStream 文件流】 将文件以字节的方式进行读取

      构造方法: new FileStream(  filePath ,FileMode. 属性,FileAccess.属性 );

 

【string类型转Byte[]字节】

string str="大王加我来巡山!";

Byte[]  byteArrary= System.Encoding.Text.Default.GetBytes(str);

//default可以设置其他编码规则

string  strEncod= System.Encoding.Text.Default.GetString(byteArrary);

 

6.【泛型】

优势1:性能  //arryList()集合添加 int 1=44  进行装箱给值的时候 int a=(int)list[0] 进行拆箱,性能低。

优势2:类型安全  //list<int> 只能添加int类型 list<MyClass> 只能添加MyClass类

 

6.1【泛型约束】

 public class List<T> {   }   // T作为泛型类的名称

  public class BaseDal<T>   where T:class  { .................................}

posted @ 2018-03-08 09:04  单脚圆规  阅读(212)  评论(0)    收藏  举报