现在的位置: 首页 > 综合 > 正文

2012.7.29—C#(3)

2012年01月28日 ⁄ 综合 ⁄ 共 3722字 ⁄ 字号 评论关闭

    学了一个星期的C#,对C#有了初步的了解。如所有初学者一样刚开始接触时可能会有点小陌生必须要多练,但比起C和C++,C#入门比较简单。下面针对这周所学内容进行简单的归纳,希望可以对初学者有一定的帮助。

    C#高级部分:

     (一),常用的对象   

    1,string是String类的别名      

    常用方法:*string Replace(old,new)用来替换字符串中的值。      

    old:要替换的字符,new:替换后的字符,返回值是替换过后的字符串。      

    *string Substring(int startIndex):从指定位置开始截取字符串,包含startIndex的字符。返回值就是截取后的字符串。    

    *string Substring(int startIndex,int count):从指定位置开始截取指定长度的字符串。     

    *int IndexOf(string):返回字符在字符串中第一次出现的位置。      

    *int LastIndexOf(string):返回字符在字符串中最后一次出现的位置。      

    *string[] Split(char[] sep):根据指定字符分割字符串。      

    *bool StartsWith(string):判断字符串是否是以指定字符开头的。           

    常用属性:     

    *Length:获得字符串中的字符数,返回值是int类型,只读属性 。     

    *Chars:获得指定为值得字符,是string对象的索引他,只读属性。str[1]不能写str.Chars[1]。   

    2,StringBuilder位于System.Text命名空间,StringBuilder无论追加多少个字符串,都是一个字符串。      

    Append()追加字符串。      

    ToStrig():把StringBuilder表示的值转换为String  

    3,DateTime 值类型Now:获得当前时间添加时间的方法   

    4,Random随机数next函数

     (二),集合   

     1,装箱和拆箱:把值类型的数据赋值给应用类型叫装箱;把已经装相过得应用类型强制转换赋值给值类型叫拆箱      

    object o = 90;      

     int j = (int) o; 装箱和拆箱操作,影响了程序的执行效率,集合位于System.Collections命名空间。

     2,哈希表:Hashtable实现了,ICollection和IEnumerable接口。     

     方法Add(object,object)通过索引来获得值。

     3,链表集合:List<T>   

     4,ArrayList:集合位于System.Collections,是一个数组链表,具有数组的功能,也有链表的特色。  

     5,Dictionary<T, K>参看Hashtable的操作

     (三),泛型  

     泛型指的的泛指的类型,话句话说就是类型可以是任意的,但一旦确定了某一种类型之后,那么类型确定,不能在换之。   List<T> :可以把T换成任何的类型,从而减少了装箱和拆箱的操作,定义一个泛型类。  

下面是泛型的实例:

using System;
public class StudyGeneric
{
    public static void Main()
    {
        People<string,int> p = new People<string,int>("sss",56);
        People<int,string> p1 = new People<int,string>(78,"www");
    }
}
public class People<Q,T>
{
    
    public T Age
    {
        get;set;
    }
    private Q name;
    public Q Name
    {
        get{return name;}
        set{name = value;}
    }
    public People(){}
    public People(Q q,T t)
    {
        this.name = q;
        this.Age = t;
    }
}

 

 

 

    注意:泛型类的构造函数不能还有<>

     (四),委托   

      监视者模式:发布委托----被监视者    

                接受委托----监视者

下面是几种委托的代码很有助于我对委托的理解:

View Code

using System;
//这个委托的名字是MyDel,委托的类型是MyDel
//这个委托代表了一系列函数,这一些函数特点必须是没有返回值,没有参数。
public delegate  void MyDel();
//这个委托代表了一系列函数,这一系列函数特点必须是返回值为String,并且有一个String类型的参数。
public delegate void MyDel2(string name);
//这个委托代表了一系列函数,这一系列函数特点必须是返回值为String,并且有一个String类型的参数。
public delegate int MyDel3(int a,int b);
public class StudyDelegate
{
    public static void Main()
    {
        int a = 0;
        //1.如果使用new关键字来创建委托对象,则必须使用一个函数初始化这个委托对象。
        MyDel2 my = new MyDel2(print);
        //2.如果不适用new关键字来创建委托对象,则可以直接赋值。
        MyDel2 m1 = print2;
        //3,委托和他封装的方法就有相同的功能。
        //my("ss");
        //m1("ww");
        //4,既然委托代表了一系列函数,那么一个委托对象可以承接多个函数。
        my += print2;
        my("ss");
        my -= print2;
        my("ss");
        
        
    }
    public static void print(string name)
    {
        
        Console.WriteLine("print----------"+name);
        
    }
    public static void print2(string n)
    {
        Console.WriteLine("2222----------"+n);
    }

 

 

 

     (五),lambda表达式  

      lambda表达式其实就是匿名委托的一个精简版。 下面是对各种是否有返回值和型参作出以下总结: 

      1,public delegate void Del1();  

        Del1 d1 = delegate(){Console.WriteLine("ss");};  

        d1 = ()=>{Console.WriteLine("ss");}; 由于没有参数,那么()不能省略  

      2,public delegate int Del2();  

        Del2 d2 = delegate(){return 1;};  

        d2 = ()=>{return 1;};  

  如果是直接返回,换句话说就是没有业务逻辑处理,也就是只有一条返回语句,可以把{}换成()同时去掉return关键字  

        d2=()=>(1);  

  如果方法体中有业务逻辑,则必须使用{}  

       d2=()=>{if(2>1){return 1;}else{return 2;}};  

     2,public delegate void Del3(string a);  

        Del3 d3 = delegate(string a){Console.WriteLine(a);};  

        d3 = (stirng a)=>{Console.WriteLine(a);};  

   可以把参数的类型给去掉,因为系统会自行的判断参数的类型,毕竟是把这个lambda赋值给了对应的委托。  

        d3 = (a)=>{Console.WriteLine(a);};  

   如果说只有一个参数,则不需要()  

        d3 = a =>{Console.WriteLine(a);};  

      4,public delegate string Del4(string a);  

        Del4 d4 = delegate(string a){string c = a+78;return c;}  

        d4 = (string a)=>{a+78;return a;};  

        d4 = a=>{a+78;return a;}  

        d4 = a=>("gg");  

      5,public delegate int Del5(int a,int b);  

        Del5 d5 = delegate(int a,int b){return a+b;}'  

        d5 = (int a,int b)=>{return a+b;};  

        d5 = (a,b)=>{return a+b;};  

 如果参数个数是大于1的时候,不能把小括号给去掉  

       d5 = (a,b)=>(a+b);  

       d5 = (a,b)=>a+b;  

       d5 = a=>a+1;

抱歉!评论已关闭.