C# 3.0 新語法

摘自老師的課件

目錄:

1. 隱式類型局部變量
2. 對象和集合初始化
3. 擴展方法
4. 查詢表達式
一:隱式類型局部變量

可用var關鍵字聲明局部變量,此時變量的類型由變量後面的初始化表達式進行推斷
例:
var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new int[] {1, 2, 3};

注意(1)使用var關鍵字定義的變量必須被初始化。如下面的代碼是錯誤的。
var num;  //var變量未初始化
 num = 10;
注意(2)var關鍵字只能用於聲明局部變量(包括在for、foreach語句中使用的變量),而不能用於聲明其他變量。

(3)var變量和object類型變量完全不同。使用object類型聲明的變量是弱類型,可以被賦予任何類型的值,而使用var關鍵字聲明的變量與普通變量一樣,仍然是強類型變量。var變量被初始化時,其類型即被確定。以後不可以被賦予其他類型的值。


二:. 對象和集合初始化

對象初始化器

C#的對象初始化器(Object Initializer)可以很好的實現這一功能。其語法如下。
new 類名(){屬性1=值1, 屬性2=值2, … , 屬性N=值N};

其中屬性的個數和順序是任意的,程序員可根據需要靈活編寫代碼。
三:擴展方法
擴展方法語法如下:
static class 封裝類名{
返回類型 擴展方法名(this 擴展類名 變量名0, 參數列表)    {
       方法體
    }
}

C#中的擴展方法允許向現有類中添加方法而不用修改現有類的代碼。
甚至當沒有某個類的源代碼,也可以通過擴展方法向類中添加方法。
例如,可以向系統類String添加一些方法。


應該慎重使用擴展方法,只有在用普通方法無法完成功能時,才應考慮使用擴展方法。
其中封裝類名是擴展方法的容器,可以是任意合法標識符。擴展類名是要被擴展的類名,即要在其中添加方法的類。
擴展方法與普通靜態方法的區別在於其方法的第一個參數前面有一個this關鍵字,這個this關鍵字是擴展方法的標誌。
例:不帶參數的擴展方法
例:帶參數的擴展方法
新聞列表中,如果新聞內容過長,則只顯示前面固定長度的內容,後面加省略號。
爲string類添加一個方法,abstractText,帶一個int型參數n,獲取前n個字符。如果不超過n個字符,則返回全部,否則返回前n個字符加省略號。
爲string類添加一個ToInt方法,將字符串轉換成整數。
綜合實例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace cs
{
    class Program
    {
        static void Main(string[] args)
        {
            //student s = new student() { id = "bzu001", name = "zhangsan", gender = "M", age = 20 };
            //s.print();
            //string t = "123";
            //int n = t.ToInt();
            //int m = n * n;
            //Console.WriteLine(m);
            //Console.ReadLine();

            string s,s2;
            int n;
            Console.WriteLine("請輸入一個新聞標題:");
            s = Console.ReadLine();
            Console.Write("要截取的字符個數:");
            n = Console.ReadLine().ToInt();
            s2 = s.abstractText(n);
            Console.WriteLine(s2);
            Console.ReadLine();


        }
    }
   
    static class studentExt
    { 
      public static void print(this student s)
      {
          Console.WriteLine("id:{0}\tname:{1}\tgender:{2}\tage:{3}\t", s.id, s.name, s.gender, s.age);

         }
    }

   
    static class StringEet
    {

        public static int ToInt(this string s)
        {
            return int.Parse(s);

        }
        public static string abstractText(this String s, int n)
        {
            if (s.Length <= n)
                return  s;
            return s.Substring(0, n) + "...";

        
        }
    }



}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace cs
{
   public class student
    {
            public string id { get; set; }
            public string name { get; set; }
            public string gender { get; set; }
            public string major { get; set; }
            public int age { get; set; }
            public int grade { get; set; }
            public int theClass { get; set; }
     
    }
}


運行圖如下:


發佈了146 篇原創文章 · 獲贊 149 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章