30天C#基礎鞏固------瞭解委託,string練習

來源:互聯網
上載者:User

標籤:

---->瞭解委託。

    生活中的例子:我要打官司,我需要找一個律師,法庭上面律師為當事人辯護,它真正執行的是當事人的陳詞,這時律師 就相當於一個委派物件。當事人則委託律師為自己辯解。

    C#中的委託是一個類,(類類型),因為只有類才有對象的概念。C#中的委託可以理解為函數的一個封裝,它使得C#中的函數可以作為參數來傳遞。

委託的定義:

        //定義委託        public delegate void MyDelegate(int para1,string para2);

委託的一些步奏:

    1:定義委託類型,(方法類似於方法的申明)

        public delegate void MyDelegate(int para1,int para2);

    2:申明委託,既然委託是一種類型,可以利用委託來聲明一個委託變數。

        MyDelegate d;

    3:執行個體化委託,並且 傳遞參數(方法)進去。

        d=new MyDelegate(new Program().Add);

    4:委託類型作為參數傳遞給另一個方法。

        MyMethod(d);     

    5:在方法中調用委託。

        private static void MyMethod(MyDelegate myDelegate)        {            //5:在方法中調用委託            myDelegate(1,2);        }

委託的注意事項:

  1:定義委託只能使用delegate關鍵字,執行個體化委託是用一個方法名(不帶括弧)作為參數,並且這個方法的定義符合委託的定義,也就是該方法的傳回值類型 ,參數個數,類型必須和委託定義中的一樣。

  2:委託可以把一個方法作為另一個方法的參數,可以看作是一個封裝方法的對象。它的調用和方法的調用一樣,傳遞參數類型和個數必須與委託定義一致。

委託我現在的理解就是把方法當作參數進行傳遞。下面的圖片最後面的方法裡面的求和就是調用前面Add()方法來進行。

    /// <summary>    /// 委託的學習    /// </summary>    class Program    {        //1:使用delegate來定義委託        public delegate void MyDelegate(int para1,int para2);        static void Main(string[] args)        {            //2:申明委託            MyDelegate d;            //3:執行個體化委託,傳遞一個方法(執行個體化之後的方法),            d=new MyDelegate(new Program().Add);            //4:委託類型作為參數傳遞給另一個方法。            MyMethod(d);           //d這裡就相當於方法Add一樣,我們傳遞到了MyMethod()方法中。        }        //這個方法定義必須和委託定義相同,即傳回型別為void,兩個參數為int.        private void Add(int para1,int para2)        {            int sum = para1 + para2;            Console.WriteLine("兩個數的和為:"+sum);            Console.ReadKey();        }        //方法的參數是委託類型。        private static void MyMethod(MyDelegate myDelegate)        {            //5:在方法中調用委託            myDelegate(1,2);        }    }

委託的練習:

    實現一個打招呼的方法,但是每個國家的是不一樣的,我們需要使用委託來實現。

    /// <summary>    /// 委託執行個體    /// </summary>    class Program    {        public delegate void GreetingDelegate(string name);        //定義委託,一個參數。        static void Main(string[] args)        {            //引入委託            //這裡總感覺不是聲明執行個體化委託,只像是執行個體化了一個Program,注意這裡執行個體化Program的同時,其實也就是把GreetingDelegate執行個體化了。            Program p=new Program();                                         p.Greeting("阿輝",p.ChineseGreeting);               //委託的方法,這裡的參數是我們的每個國家的方法。            p.Greeting("張輝",p.EnglishGreeting);            Console.ReadKey();        }        /// <summary>        /// 把委託作為參數,在方法裡面調用傳遞的方法。        /// </summary>        /// <param name="name"></param>        /// <param name="callback"></param>        public void Greeting(string name,GreetingDelegate callback)        {            //調用委託            callback(name);        }        //英國人        public void EnglishGreeting(string name)        {            Console.WriteLine("Hello,"+name);        }        //中國人        public void ChineseGreeting(string name)        {            Console.WriteLine("你好,"+name);        }    }

 

注意我們這個練習和上面的區別,我們上面是直接按照步驟,每一步都沒有省略,這裡我們只是執行個體化了Program,我們上面的例子可以簡寫成這樣。

        static void Main(string[] args)        {            ////2:申明委託            //MyDelegate d;            ////3:執行個體化委託,傳遞一個方法(執行個體化之後的方法),            //d=new MyDelegate(new Program().Add);            ////4:委託類型作為參數傳遞給另一個方法。            //MyMethod(d);           //d這裡就相當於方法Add一樣,我們傳遞到了MyMethod()方法中。            Program d=new Program();            MyMethod(d.Add);        }

關於字串等的練習。

eg--01:   123-456--7--89-----123-----2,把類似的字串中重複符號-去掉。返回123-456-7-89-123-2的形式。

            string str = "123-456--7--89-----123-----2";            string[] stsr = str.Split("-".ToCharArray(),StringSplitOptions.RemoveEmptyEntries); //先將字串劃分為字元數組,把其中的"-"去掉              str=string.Join("-",stsr);                     //利用Join把字元數組中的每一項通過"-"串連起來。             Console.WriteLine(str);            Console.ReadKey();

eg—02:從檔案路徑中提取出檔案名稱(包括尾碼),比如:C:/A/B.txt中提取出B.txt這個檔案名稱。

            string str = "C:/A/B.txt";       //我們通過File得到的路徑都是字串。              string path = Path.GetFileName(str);            Console.WriteLine(path);            Console.ReadKey();

eg—03:  "192.168.10.5[Port=21,type=ftp]",請用程式解析此字串,列印"IP地址為,,,連接埠為,,,提供服務。。。"    

方法1:      

            string str = "192.168.10.5[Port=21,type=ftp]";            int a = str.IndexOf(‘=‘);      //擷取到位元組‘=‘的地址            string port = str.Substring(++a, 2);//截取後面的資料            int b = str.IndexOf(‘[‘);            string ip = str.Substring(0, b);            int c = str.IndexOf(‘e‘);                string type = str.Substring(c + 2, 3);            Console.WriteLine(ip);                        Console.WriteLine(port);            Console.WriteLine(type);            Console.WriteLine("IP地址是{0},連接埠號碼是{1},提供的服務是{2}",ip,port,type);            Console.ReadKey();

方法2:

            string s1 = "192.168.1.5[Port=21,Type=ftp]";            string s2 = "192.168.10.5[Port=21]";            //首先是IP            string[] temps = s1.Split("[]".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);            string ip = temps[0];            //下面取出來的是索引值對。            string[] subTemps = temps[1].Split(‘,‘);            Dictionary<string ,string> dic=new Dictionary<string, string>();            for (int i = 0; i <subTemps.Length; i++)            {                string[] ss = subTemps[i].Split(‘=‘);                dic.Add(ss[0],ss[1]);                 //把鍵和值放到了集合中。            }            dic.Add("IP",temps[0]);            if(!dic.ContainsKey("Type"))             {                  dic.Add("Type","fttp");            }            //迴圈輸出集合中的鍵和值            foreach (KeyValuePair<string, string> item in dic)            {                Console.WriteLine(item.Key+":  "+item.Value);            }            Console.ReadKey();

30天C#基礎鞏固------瞭解委託,string練習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.