Expression-Bodied Members

Expression-bodied members یکی از ویژگی‌های سی شارپ 6 بوده، که به شما اجازه استفاده از لامبدا، برای کدنویسی راحت‌تر متدها، خاصیت‌ها، سربارگذاری عملگرها و ایندکسرهای یک کلاس را می‌دهد. با وجود این ویژگی شما به جای نوشتن بدنه یک عضو می‌توانید از علامت لامبدا استفاده کنید. به عنوان مثال، متد زیر را در نظر بگیرید که دو پارامتر را دریافت کرده و جمع آنها را بر می‌گرداند :

public int GetSum(int x, int y)
{
    return x + y;
}

با استفاده از ویژگی Expression-bodied members شما می‌توانید کد بالا را خلاصه‌تر کرده و به صورت زیر بنویسید :

public int GetSum(int x, int y) => x + y;

همانطور که در کد بالا مشاهده می‌کنید، امضای متد را دستکاری نمی‌کنیم اما بدنه را با علامت => شروع و سپس عبارتی که جمع دو مقدار را بر می‌گرداند را می‌نویسیم. به این نکته توجه کنید که دیگر لازم نیست از کلمه کلیدی return استفاده کنیم. برای تعریف خاصیت‌ها هم می‌توانیم از این ویژگی استفاده کنیم. مثلاً در کد زیر یک خاصیت فقط خواندنی که نام کامل یک شخص را بر می‌گرداند تعریف کرده‌ایم :

public string FullName
{
    get
    {
        return FirstName + " " + LastName;
    }
}

کد بالا را به صورت زیر هم می‌توان نوشت :

public string FullName => FirstName + " " + LastName;

برای متدهایی هم که مقدار برگشتی آنها از نوع viod است و دارای یک خط در بدنه هستند هم می‌توان از این ویژگی به صورت زیر استفاده کرد :

public void PrintMessage(string message) => Console.WriteLine(message);

Expression-bodied members در تعریف ایندکسرها و سربارگذاری عملگرها هم به کار می‌رود :

// Indexer
public int this[int index] => InternalCollection[index];

// Operator Overload
public static Point operator +(Point p1, Point p2) => new Point(p1.X + p2.X, p1.Y + p2.Y);

// Conversion Overload
public static implicit operator string(Point point) => $"({point.X}, {point.Y})";

ممکن است که این سؤال برایتان پیش بیاید که آیا می‌توان از ویژگی در اعضایی که دارای چندین دستور در بدنه خود هستند استفاده کرد. جواب منفی است. این ویژگی فقط برای اعضایی به کار می‌رود که دارای یک دستور ساده در بدنه خود هستند.