اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
یکی از امکانات جالب سیشارپ که در نسخه 6 معرفی شد، قابلیت Expression-Bodied Members بود. در نسخه 7 سیشارپ، امکانات جدیدتری اضافه شده است؛ به عنوان مثال اکنون میتوان برای constructors, finalizers و همچنین get and set برای پراپرتیها و ایندکسرها نیز از این قابلیت استفاده کرد.
به عنوان مثال اکنون سازندهی کلاس فوق را میتوانیم از روش block body متداول، به روش expression body، به صورت خلاصهتری بنویسیم:
البته محدودیت این روش این است که تنها برای یک پارامتر میتوانیم به اینصورت عمل کنیم؛ اما در نسخه 7.1 قرار است قابلیت استفاده از expression body برای بیشتر از یک پارامتر نیز اضافه شود:
کد فوق را میتوانیم در سیشارپ 7 به صورت خلاصهتری بنویسیم:
در ویژوالاستودیوی 2017 نیز با قرار دادن ماوس بر روی پراپرتی x_، استفادهی از سینتکس expression body به شما پیشنهاد داده خواهد شد:
استفاده از expression body برای constructors
public class Person { public string FirstName { get; set; } public Person(string firstName) { this.FirstName = firstName; } }
public class Person { public string FirstName { get; set; } public Person(string firstName) => this.FirstName = firstName; }
public class Person { public string Name { get; } public int Age { get; } public Person(string name, int age) => (Name, Age) = (name, age); }
اما اگر نیاز داشتید برای بیشتر از دو متغیر از expression body استفاده کنید میتوانید از Tuple برای شبیهسازی آن استفاده کنید(+):
public class Person { private readonly (string name, int age) _tuple; public string Name => _tuple.name; public int Age => _tuple.age; public Person(string name, int age) => _tuple = (name, age); }
استفاده از expression body برای destructors
public class Resource { ~Resource() => Console.WriteLine("destructor"); }
استفاده از expression body در get / set accessors
در سیشارپ 7 برای accessors نیز میتوانیم از سینتکس جدید expression body استفاده کنیم. به عنوان مثال کد زیر را در نظر بگیرید:
private int _x; public int X { get { return _x; } set { _x = value; } }
private int _x; public int X { get => _x; set => _x = value; }
در ویژوالاستودیوی 2017 نیز با قرار دادن ماوس بر روی پراپرتی x_، استفادهی از سینتکس expression body به شما پیشنهاد داده خواهد شد:
همچنین برای Event Accessors نیز میتوانیم از این قابلیت استفاده کنیم:
private EventHandler _someEvent; public event EventHandler SomeEvent { add => _someEvent += value; remove => _someEvent -= value; }