最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探秘C# 6.0 的新特性

 更新時(shí)間:2015年03月24日 11:40:50   投稿:hebedich  
本文的內(nèi)容包括引入C#6.0中的新的語(yǔ)言特性有哪些. 還有已經(jīng)被引入的代碼名稱(chēng)為 “Roslyn”新編譯器. 編譯器是開(kāi)放源碼的,并且可以從 codeplex 網(wǎng)站的這個(gè)地址下載到源代碼:https://roslyn.codeplex.com/.

C# 6.0 中的新特性

我們可以對(duì)這些新特性一個(gè)一個(gè)的進(jìn)行討論,而首先要列出 C# 6.0 中這些特性的一個(gè)清單

自動(dòng)的屬性初始化器 Auto Property Initializer

主構(gòu)造器 Primary Consturctor

字典初始化器 Dictionary Initializer

聲明表達(dá)式 Declaration Expression

靜態(tài)的Using Static Using

catch 塊中的 await

異常過(guò)濾器 Exception Filter

用于檢查NULL值的條件訪(fǎng)問(wèn)操作符

1. 自動(dòng)的屬性初始化器Auto Property initialzier

之前的方式

初始化一個(gè)自動(dòng)屬性Auto Property的唯一方式,就是去實(shí)現(xiàn)一個(gè)明確的構(gòu)造器,在里面對(duì)屬性值進(jìn)行設(shè)置.

public class AutoPropertyBeforeCsharp6
{
  private string _postTitle = string.Empty;
  public AutoPropertyBeforeCsharp6()
  {
    //assign initial values
    PostID = 1;
    PostName = "Post 1";
  }
 
  public long PostID { get; set; }
 
  public string PostName { get; set; }
 
  public string PostTitle
  {
    get { return _postTitle; }
    protected set
    {
      _postTitle = value;
    }
  }
}

有了這個(gè)特性之后的方式

使用 C# 6 自動(dòng)實(shí)現(xiàn)的帶有初始值的屬性可以不用編寫(xiě)構(gòu)造器就能被初始化. 我們可以用下面的代碼簡(jiǎn)化上面的示例:

public class AutoPropertyInCsharp6
{
  public long PostID { get; } = 1;
 
  public string PostName { get; } = "Post 1";
 
  public string PostTitle { get; protected set; } = string.Empty;
}

2. 主構(gòu)造器

我們使用構(gòu)造器主要是來(lái)初始化里面的值.(接受參數(shù)值并將這些參數(shù)值賦值給實(shí)體屬性).

之前的方式

public class PrimaryConstructorsBeforeCSharp6
{
  public PrimaryConstructorsBeforeCSharp6(long postId, string postName, string postTitle)
  {
    PostID = postId;
    PostName = postName;
    PostTitle = postTitle; 
  }
 
  public long PostID { get; set; }
  public string PostName { get; set; }
  public string PostTitle { get; set; }
}

有了這個(gè)特性之后的方式

public class PrimaryConstructorsInCSharp6(long postId, string postName, string postTitle)
{    
  public long PostID { get; } = postId;
  public string PostName { get; } = postName;
  public string PostTitle { get; } = postTitle;
}

在 C# 6 中, 主構(gòu)造器為我們提供了使用參數(shù)定義構(gòu)造器的一個(gè)簡(jiǎn)短語(yǔ)法. 每個(gè)類(lèi)只可以有一個(gè)主構(gòu)造器.

如果你觀察上面的示例,會(huì)發(fā)現(xiàn)我們將參數(shù)初始化移動(dòng)到了類(lèi)名的旁邊.

你可能會(huì)得到下面這樣的錯(cuò)誤“Feature ‘primary constructor' is only available in ‘experimental' language version.”(主構(gòu)造器特性只在實(shí)驗(yàn)性質(zhì)的語(yǔ)言版本中可用),為了解決這個(gè)問(wèn)題,我們需要編輯SolutionName.csproj 文件,來(lái)規(guī)避這個(gè)錯(cuò)誤 . 你所要做的就是在WarningTag 后面添加額外的設(shè)置

<LangVersion>experimental</LangVersion>

‘主構(gòu)造器'只在‘實(shí)驗(yàn)'性質(zhì)的語(yǔ)言版本中可用

3. 字典初始化器

之前的方式

編寫(xiě)一個(gè)字典初始化器的老辦法如下

public class DictionaryInitializerBeforeCSharp6
{
  public Dictionary<string, string> _users = new Dictionary<string, string>()
  {
    {"users", "Venkat Baggu Blog" },
    {"Features", "Whats new in C# 6" }
  };
}

有了這個(gè)特性之后的方式

我們可以像數(shù)組里使用方括號(hào)的方式那樣定義一個(gè)字典初始化器

public class DictionaryInitializerInCSharp6
{
  public Dictionary<string, string> _users { get; } = new Dictionary<string, string>()
  {
    ["users"] = "Venkat Baggu Blog",
    ["Features"] = "Whats new in C# 6" 
  };
}

4. 聲明表達(dá)式

之前的方式

public class DeclarationExpressionsBeforeCShapr6()
{
  public static int CheckUserExist(string userId)
  {
    //Example 1
    int id;
    if (!int.TryParse(userId, out id))
    {
      return id;
    }
    return id;
  }
 
  public static string GetUserRole(long userId)
  {
    ////Example 2
    var user = _userRepository.Users.FindById(x => x.UserID == userId);
    if (user!=null)
    {
      // work with address ...
 
      return user.City;
    }
  }
}

有了這個(gè)特性之后的方式

在 C# 6 中你可以在表達(dá)式的中間聲明一個(gè)本地變量. 使用聲明表達(dá)式我們還可以在if表達(dá)式和各種循環(huán)表達(dá)式中聲明變量

public class DeclarationExpressionsInCShapr6()
{
  public static int CheckUserExist(string userId)
  {
    if (!int.TryParse(userId, out var id))
    {
      return id;
    }
    return 0;
  }
 
  public static string GetUserRole(long userId)
  {
    ////Example 2
    if ((var user = _userRepository.Users.FindById(x => x.UserID == userId) != null)
    {
      // work with address ...
 
      return user.City;
    }
  }
}

5. 靜態(tài)的 Using

之前的方式

對(duì)于你的靜態(tài)成員而言,沒(méi)必要為了調(diào)用一個(gè)方法而去弄一個(gè)對(duì)象實(shí)例. 你會(huì)使用下面的語(yǔ)法

TypeName.MethodName

public class StaticUsingBeforeCSharp6
{
  public void TestMethod()
  {
    Console.WriteLine("Static Using Before C# 6");
  }
}

之后的方式

在 C# 6 中,你不用類(lèi)名就能使用靜態(tài)成員. 你可以在命名空間中引入靜態(tài)類(lèi).

如果你看了下面這個(gè)實(shí)例,就會(huì)看到我們將靜態(tài)的Console類(lèi)移動(dòng)到了命名空間中

using System.Console;
namespace newfeatureincsharp6
{
  public class StaticUsingInCSharp6
  {
    public void TestMethod()
    {
      WriteLine("Static Using Before C# 6");
    }
  }
}

6. catch塊里面的await

C# 6 之前catch和finally塊中是不能用await 關(guān)鍵詞的. 在 C# 6 中,我們終于可以再這兩個(gè)地方使用await了.

try 
{     
 //Do something
}
catch (Exception)
{
 await Logger.Error("exception logging")
}

7. 異常過(guò)濾器

異常過(guò)濾器可以讓你在catch塊執(zhí)行之前先進(jìn)行一個(gè)if條件判斷.

看看這個(gè)發(fā)生了一個(gè)異常的示例,現(xiàn)在我們想要先判斷里面的Exception是否為null,然后再執(zhí)行catch塊

//示例 1
try
{
  //Some code
}
catch (Exception ex) if (ex.InnerException == null)
{
  //Do work
 
}
 
//Before C# 6 we write the above code as follows
 
//示例 1
try
{
  //Some code
}
catch (Exception ex) 
{
  if(ex.InnerException != null)
  {
    //Do work;
  }
}

8. 用于檢查NULL值的條件訪(fǎng)問(wèn)操作符?.

看看這個(gè)實(shí)例,我們基于UserID是否不為null這個(gè)條件判斷來(lái)提取一個(gè)UserRanking.

之前的方式

var userRank = "No Rank";
if(UserID != null)
{
  userRank = Rank;
}
 
//or
 
var userRank = UserID != null ? Rank : "No Rank"

有了這個(gè)特性之后方式

var userRank = UserID?.Rank ?? "No Rank";

 以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • WinForm IP地址輸入框控件實(shí)現(xiàn)

    WinForm IP地址輸入框控件實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了WinForm IP地址輸入框控件的實(shí)現(xiàn)代碼,基于VS2010模擬windows系統(tǒng)自帶IP輸入框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C#實(shí)現(xiàn)高性能異步文件下載器詳解

    C#實(shí)現(xiàn)高性能異步文件下載器詳解

    異步文件下載器用處很大,當(dāng)我們需要實(shí)現(xiàn)大文件下載,多任務(wù)并行下載等都可以用的上,下面小編就來(lái)和大家聊聊如何使用C#實(shí)現(xiàn)高性能異步文件下載器吧
    2025-03-03
  • C#異步執(zhí)行任務(wù)的方法

    C#異步執(zhí)行任務(wù)的方法

    這篇文章主要介紹了C#異步執(zhí)行任務(wù)的方法,以一個(gè)簡(jiǎn)單實(shí)例形式分析了C#異步執(zhí)行的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • .NET連接MongoDB數(shù)據(jù)庫(kù)實(shí)例教程

    .NET連接MongoDB數(shù)據(jù)庫(kù)實(shí)例教程

    這則小竅門(mén)將講述如何開(kāi)發(fā)一個(gè).NET應(yīng)用來(lái)連接Mongo數(shù)據(jù)庫(kù)并執(zhí)行多種操作。同時(shí)還稍微涉及了Mongo數(shù)據(jù)庫(kù)和多種命令
    2013-11-11
  • HttpWebRequest實(shí)現(xiàn)下載圖片至本地

    HttpWebRequest實(shí)現(xiàn)下載圖片至本地

    這篇文章主要為大家詳細(xì)介紹了HttpWebRequest實(shí)現(xiàn)下載圖片至本地,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C# XML中的轉(zhuǎn)義字符操作

    C# XML中的轉(zhuǎn)義字符操作

    這篇文章主要介紹了C# XML中的轉(zhuǎn)義字符操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • C# try catch代碼塊不起效果的解決方法

    C# try catch代碼塊不起效果的解決方法

    本文主要介紹了C# try catch代碼塊不起效果的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 無(wú)焦點(diǎn)獲取條碼槍返回值示例

    無(wú)焦點(diǎn)獲取條碼槍返回值示例

    這篇文章主要介紹了使用C#獲取條碼槍的返回值,實(shí)現(xiàn)了獲取條碼信息、條碼是否有效、掃描時(shí)間、掃描碼等參數(shù)
    2014-01-01
  • IIS下調(diào)用證書(shū)出現(xiàn)異常的解決方法 (C#)

    IIS下調(diào)用證書(shū)出現(xiàn)異常的解決方法 (C#)

    這篇文章主要為大家詳細(xì)介紹了IIS下調(diào)用證書(shū)出現(xiàn)異常的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 基于C#編寫(xiě)經(jīng)理評(píng)分系統(tǒng)

    基于C#編寫(xiě)經(jīng)理評(píng)分系統(tǒng)

    最近接了這樣一個(gè)項(xiàng)目,要求使用c#編寫(xiě)經(jīng)理評(píng)分系統(tǒng),需求,要顯示員工信息,實(shí)現(xiàn)項(xiàng)目經(jīng)理給員工評(píng)分功能,今天小編分步驟給大家介紹,需要的的朋友參考下
    2017-03-03

最新評(píng)論

焉耆| 靖江市| 凯里市| 依兰县| 临颍县| 马龙县| 修文县| 浪卡子县| 邛崃市| 化州市| 太康县| 长丰县| 南城县| 藁城市| 文山县| 张家界市| 康平县| 江口县| 江源县| 澄迈县| 新疆| 天水市| 凤山县| 邯郸县| 苍山县| 莫力| 定南县| 苍梧县| 宁陕县| 阿鲁科尔沁旗| 盐山县| 来安县| 龙川县| 漾濞| 偏关县| 宝应县| 监利县| 柘城县| 五原县| 栾川县| 江津市|