筆記:C# 6.0 自動實作屬性初始化與運算式主體定義

專案裡有個在父類別宣告 virtual List<string> MyProp { get; } = new List<string>(); ,接著在子類別 override MyProp, Visual Studio 2017 自動帶出 List<string> MyProp => base.MyProp; 。(術語為 Expression Body Definition 運算式主體定義)

子類別要傳回 "Prod1","Prod2" ,我差一點就接改成 List<string> MyProp  => "Prod1,Prod2".Split(',').ToList();,仔細想想不對,我的本意是要給 MyProp 屬性初始值,沿用 => 寫法變成每次產生新字串陣列,意義不同,差點搞錯。為此趕緊寫篇筆記壓壓驚!

來個範例:

using System;
 
public class Blah
{
    private Guid _prop1 = Guid.NewGuid();
    public Guid Prop1
    {
        get
        {
            return _prop1;
        }
    }
    public Guid Prop2 { get; } = Guid.NewGuid();
 
    public Guid Prop3
    {
        get
        {
            return Guid.NewGuid();
        }
    }
    public Guid Prop4 => Guid.NewGuid();
 
}
 
static void Main(string[] args)
{
    var blah = new Blah();
    Console.WriteLine($"Prop1={blah.Prop1},Prop2={blah.Prop2}");
    Console.WriteLine($"Prop1={blah.Prop1},Prop2={blah.Prop2}");
    Console.WriteLine($"Prop3={blah.Prop3},Prop4={blah.Prop4}");
    Console.WriteLine($"Prop3={blah.Prop3},Prop4={blah.Prop4}");
    Console.Read();
}

在以上範例中,Prop1 與 Prop2 意義相同,都是物件建立時給予屬性初始值,屬性值固定不變;Prop3 與 Prop4 則偏向動態性質,每次呼叫時都重新產生新值。其中 Prop2 與 Prop4 是 C# 6.0 起支援的新寫法,較傳統寫法簡潔。

實測結果如下,Prop1/Prop2 兩次呼叫結果相同,Prop3/Prop3 每次讀取都會拿到新的 GUID。

Prop1=9a818bfa-7789-4dc3-8eab-a1c526cdf6c3,Prop2=d09ae5a4-01e8-41fa-a888-b508c974e463
Prop1=9a818bfa-7789-4dc3-8eab-a1c526cdf6c3,Prop2=d09ae5a4-01e8-41fa-a888-b508c974e463
Prop3=76e8b7ac-0830-4715-9d78-6840e7d59b3e,Prop4=922858c2-294c-4178-8a74-bd7bef385eb2
Prop3=1af010c8-a926-4e17-ad77-83d481227171,Prop4=03a8ea07-cc09-42fc-b37d-77c9d6c087d6

【延伸閱讀】
歡迎推文分享:
Published 30 July 2017 12:31 PM 由 Jeffrey
Filed under:
Views: 2,825



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<July 2017>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication