C# 6 – New Features

המטרה של הגרסה החדשה של C# 6 אשר מגיע יחד Visual Studio 2015 Preview היא שיפור תהליכי קידוד נפוצים יומיומיים, מבלי להוסיף הכבדה על הקוד, אלא להפך להפוך את הקוד לקליל יותר.

בגרסה החדשה חלק מהתכונות חדשות בעיקר בנושא הסינטקס מרגישות במעט כעבודה לא גמורה, חלק מתוספות בגרסה החדשה הם שיפורים של חלקים קיימים וכמובן תיקוני באגים מגרסאות ישנות.

Expression-level features

הביטוי nameof – מחזיר לנו את string literal של ה property שעליו הביטוי nameof נמצא.

דוגמאות:

– הדרך הישנה

public AddNewEmployee(Employee employee)
{
    if (employee == null)
    {
        throw  new ArgumentNullException("employee");
    }
}

– הדרך החדשה:

public AddNewEmployee(Employee employee)
{
    if (employee == null)
    {
        throw  new ArgumentNullException(nameof(employee));
    }
}

הבעיה בדרך הישנה שהשם של הפרמטר יכול כל רגע להשתנות ואנחנו לא יכולים לעקוב אחריו.

String interpolation

כדי לחבר מחרוזות אנחנו משתמשים היום ב string.Format – בדרך זו אנחנו משתמשים במיקום של המשתנים ומחליפים את ערך של string.

בדרך החדשה אנחנו מחברים את המחרוזות באופן ישיר אחד אחרי השני.

– הדרך הישנה:

var person = String.Format("{0} is {1} year{{s}} old", p.Name, p.Age);

– הדרך החדשה:

var person = "\{p.Name} is \{p.Age} year{s} old";

– דרך נוספת (ולדעתי יותר טובה):

var person = $"{p.Name,20} is {p.Age:D3} year{{s}} old";

Null-conditional operators

אנחנו משתמשים הרבה בדיקות של null, שהם נכונות אך לעיתים הם גם רבות מדי לדוגמה:

if (employees? != null && employee[0] != null && employee[0].Type == EmployeeType.New)

היינו רוצים לקצר את if את זה לבדיקה אחד על המשתנה. זה מה C# 6 מאפשר לנו – על ידי השימוש בסינטקס הבא:

if (employees?[0]?.Type == EmployeeType.New)

כל שלב ב if קורה רק אילו הביטוי לפניו אינו null.

Index initializers

באמצעות C# 6 ניתן לאתחל index של המשתנים כבר ביצירה שלהם.

– בעבר לצורך אתחול של Dictionary היינו עושים כך:

var emplyoees = new Dictionary<int, Employee>()
{
    {1, new Employee()},
    {2, new Employee()},
    {3, new Employee()},
};

– באמצעות C# 6 ניתן לאתחל Dictionary כך:

var emplyoees = new Dictionary<int, Employee>()
{
    1 = new Employee(),
    2 = new Employee(),
    3 = new Employee(),
};

Exception filters

כבר היום ב VB.Net וגם ב F# ניתן לפלטר על Exception, עכשיו C# 6 נותן גם לנו את אפשרות לבצע זאת:

try
{
 
}
catch (ConfigurationException e) if(e.IsSevere)
{
 
}

Await in cant and finally

תוספת נוספת של C# 6 היא האפשרות להשתמש ב await בתוך הבלוק של catch ושל ה finally:

try
{
 
}
catch (ConfigurationException e) if (e.IsSevere)
{
    await LogAsync(e);
}
finally
{
    await CloseAsync();
}

Getter-only auto-properties

כדי להשתמש ב Auto Properties היינו צריכים לתת לו גם get וגם set גם אם להיינו רוצים לאפשר זאת (פתרון Private set), הפיצר החדש ב C# 6 מאפשר לנו ליצור Auto Properties רק באמצעות get:

class Employee
{
    public int Id { get; }
 
    public Employee(int id)
    {
        Id = id;
    }
}

בנוסף, ניתן גם לאתחל Auto Properties, לדוגמה:

public int Id { get; } = 1

Using Static Classes

כאשר אנחנו משתמשים בפונקציות \ משתנים סטאטיים אנחנו צריכים להשתמש בשם ה Class שלהם לפני. לדוגמה:

Math.Abs(-1);

ב C# 6 אין צורך בזה יותר:

Abs(-1);

Expression-Bodied Methods and Properites

מאפשר לנו לחזיר אך של פונקציה באמצעות Lamda:

public override string ToString() => "\{Id}";

וכך גם לגבי Properties:

public string Name => First + " " + Last;

ניתן ללמוד על פיצרים החדשים של C# 6 ב roslyn.codeplaex.com

עם התגית: , ,
פורסם ב-C#, C# 6, VIsual Studio 2015

כתיבת תגובה