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

探秘C# 6.0 的新特性

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

C# 6.0 中的新特性

我們可以對這些新特性一個一個的進行討論,而首先要列出 C# 6.0 中這些特性的一個清單

自動的屬性初始化器 Auto Property Initializer

主構(gòu)造器 Primary Consturctor

字典初始化器 Dictionary Initializer

聲明表達式 Declaration Expression

靜態(tài)的Using Static Using

catch 塊中的 await

異常過濾器 Exception Filter

用于檢查NULL值的條件訪問操作符

1. 自動的屬性初始化器Auto Property initialzier

之前的方式

初始化一個自動屬性Auto Property的唯一方式,就是去實現(xiàn)一個明確的構(gòu)造器,在里面對屬性值進行設(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;
    }
  }
}

有了這個特性之后的方式

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

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)造器主要是來初始化里面的值.(接受參數(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; }
}

有了這個特性之后的方式

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òu)造器.

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

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

<LangVersion>experimental</LangVersion>

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

3. 字典初始化器

之前的方式

編寫一個字典初始化器的老辦法如下

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

有了這個特性之后的方式

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

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

4. 聲明表達式

之前的方式

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;
    }
  }
}

有了這個特性之后的方式

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

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

之前的方式

對于你的靜態(tài)成員而言,沒必要為了調(diào)用一個方法而去弄一個對象實例. 你會使用下面的語法

TypeName.MethodName

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

之后的方式

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

如果你看了下面這個實例,就會看到我們將靜態(tài)的Console類移動到了命名空間中

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 中,我們終于可以再這兩個地方使用await了.

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

7. 異常過濾器

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

看看這個發(fā)生了一個異常的示例,現(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值的條件訪問操作符?.

看看這個實例,我們基于UserID是否不為null這個條件判斷來提取一個UserRanking.

之前的方式

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

有了這個特性之后方式

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    無焦點獲取條碼槍返回值示例

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

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

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

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

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

最新評論

湖南省| 扬中市| 凤凰县| 清涧县| 霍州市| 崇礼县| 运城市| 台东市| 泾源县| 甘孜县| 东阿县| 海门市| 尼勒克县| 辛集市| 庆阳市| 双桥区| 梅河口市| 巴里| 五华县| 正阳县| 乐亭县| 荔浦县| 双鸭山市| 张家口市| 波密县| 丹巴县| 壶关县| 临清市| 南郑县| 兴城市| 津市市| 泽库县| 白城市| 云安县| 瑞昌市| 青川县| 台东市| 锦州市| 成武县| 巩留县| 昔阳县|