介紹C# 6.0新功能-「運算式主體成員」(Expression-bodied members)介紹,將會敘述如何使用這個簡易的語法糖。
C# 6.0發表時間:2015年7月,始於.NET Framework 4.6,Visual Studio 2015。
「運算式主體成員」(Expression-bodied members),官方說明是:「輕量型方法提供輕量型語法」、「資料傳輸物件 (DTO) 及具有最小行為的其他類型」,看起來不太懂,十分抽象。但是概念卻很容易懂,簡單來說,就是在當有一個function,其邏輯很簡單,就可以適用這個簡易的寫法,直接把算式寫出來,不用再命名、運算、回傳值等動作。
所以他的形式為:member => expression;
其中expression
為有效的運算式。
範例一:式子為
public override string ToString()
{
return FirstName + " " + LastName;
}
可以簡化為:public override string ToString() => FirstName + " " + LastName;
範例二,本來算式為Sum(int a, int b)
,我們要把A
加上B
,並且回傳,就會變成:return a + b;
:
Public int Sum(int a, int b)
{
return a + b;
}
但是我們簡化後會變成:Public int Sum(int a, int b) => a + b;
。
從範例一(沒有參數)和範例二(有參數)可以看出來,這次簡化的結果是在function命名的後面,直接加上回傳的算式。就好像範例二的Public int Sum(int a, int b)
後,直接加上a + b;
。所以公式就是「方法命名」+「=>」+「要回傳的算式」+「;」。
記得這個語法糖適合在簡單的回傳值,如果太過於複雜,為了可讀性還是不建議這樣寫。
廢話不多說,直接看更長的範例吧!
public class Car
{
public string Brand { get; private set; } //廠牌
public string Model { get; } //型號
public string AppearanceYear { get; private set; } //出廠年份
public int Price { get; private set; } //價格
public Car(string brand, string model, string year, int money)
{
Brand = brand;
Model = model;
AppearanceYear = year;
Price = money;
}
public override string ToString() => Brand + "-" + AppearanceYear;
public string ShowModel() => "Model: "+ Model; //顯示型號
public double ShowMillion() => Price/1000000.0;//顯示價格(百萬)
public double ShowPrice(int otherPrice) => (otherPrice + Price)/1000000.0; //顯示總價格(百萬)
}
首先,我們先製作一個Car
的Class,裡面有四個屬性:Brand
、Model
、AppearanceYear
、Price
,其中Model
運用上一篇唯讀auto屬性,讓他不會被修改。
後面有四個function,皆是實作本篇的範例。前面兩個string
,簡單的return
字串,而下面兩個是數學運算式,而最後一個ShowPrice
,則是帶有參數,並且用此參數進行運算後回傳。
而實作的部份就在下面:
public class Program
{
public static void Main()
{
var car = new Car("Lamborghini", "Aventador S" ,"2019", 4500000);
Console.WriteLine(car.ToString());
Console.WriteLine(car.ShowModel());
Console.WriteLine("Price(million):" + car.ShowMillion());
Console.WriteLine("Total Price(million):" + car.ShowPrice(1000000));
}
}
甚至實作也可以使用「字串插補」(後續會說明,此為C# 6.0的新功能之一),所以會變成:
public override string ToString() => $"{Brand}-{AppearanceYear}";
字串因此更簡潔,不必使用「+」做連結
別忘了,這建議是寫在簡單的回傳算式中喔!
~Copyright by Eyelash500~
IT技術文章:EY*研究院
iT邦幫忙:eyelash*睫毛
Blog:睫毛*Relax
Facebook:睫毛*Relax