Ciri baru di C # 6

C # 6 dihantar dengan Visual Studio 2015 dan hadir dengan beberapa ciri baru yang menarik. Terdapat banyak ciri yang kurang mempromosikan kekacauan kod dan menulis lebih bersih, kod yang dapat dikekalkan. Dalam siaran ini, saya ingin menjalankan anda melalui beberapa ciri baru dalam bahasa C #.

Penapis pengecualian

Penapis pengecualian tidak baru di VB - kini anda mempunyai ciri ini di C # juga. Ini membolehkan anda menyaring pengecualian dalam kod anda berdasarkan tahap keparahan. Inilah contohnya.

try

{

//some code that might throw an exception

}

catch (Exception exception) if(exception.GetType() != typeof(SqlException))

{

ExceptionManager.HandleException(exception);

}

Kod di atas memeriksa sama ada pengecualian yang dilontarkan adalah jenis SqlException. Sekiranya tidak, pengecualian dikendalikan. Berikut adalah contoh lain yang menunjukkan bagaimana anda dapat memeriksa sifat Mesej objek pengecualian dan menentukan keadaan yang sesuai.

try

{

throw new CustomException("");

}

catch (CustomException ex) if (ex.Message == "")

{

//control will come in this catch block

}

catch (CustomException ex) if (ex.Message == "")

{

//control will not come in this catch block

}

Sokongan untuk asinkron dalam tangkapan dan akhirnya menyekat

Ini memang ciri yang hebat. Kami sering mencatatkan pengecualian ke fail atau pangkalan data. Operasi sedemikian memerlukan sumber daya dan memakan masa kerana anda perlu mengakses cakera untuk melakukan I / O. Dalam situasi seperti itu, akan lebih baik jika anda dapat membuat panggilan tidak segerak di dalam blok pengecualian anda. Anda mungkin juga perlu melakukan beberapa operasi pembersihan di blok akhirnya yang mungkin intensif sumber daya dan / atau memakan masa.

Dengan C # 6 anda tidak perlu lagi menyekat utas semasa semasa melakukan operasi yang intensif sumber daya atau memakan masa. Coretan kod yang diberikan seterusnya menggambarkan bagaimana anda boleh menggunakan kata kunci menunggu dalam tangkapan dan akhirnya blok.

public async Task ProcessAsync()

{

try

{

//some code that might throw an exception

}

catch

{

await Task.Delay(5000);

}

finally

{

await Task.Delay(1000);

}

}

Coretan kod berikut menunjukkan bahawa anda boleh menunggu panggilan ke kaedah tersuai LogExceptionAsync () untuk pengecualian log.

try

{

//code that might throw an exception

}

catch (Exception exception)

{

await LogExceptionAsync(exception);

}

Sokongan untuk penyataan statik "menggunakan"

Ini adalah satu lagi ciri baru yang bagus di C # 6 yang membolehkan anda menggunakan kaedah statik tanpa memerlukan rujukan eksplisit. Inilah contohnya.

using System;

using System.Console;

public class Program

{

private static void Main()

{

WriteLine("New features in C# 6");

}

}

Seperti yang dapat anda lihat dalam coretan kod di atas, anda tidak perlu lagi secara jelas menentukan jenisnya ketika memanggil kaedah WriteLine () statik yang termasuk dalam kelas System.Console. Pada dasarnya, ciri ini mempromosikan kod yang lebih bersih - kod yang lebih senang dibaca, ditulis dan dikekalkan.

Permulaan harta automatik

Ciri ini membolehkan anda menetapkan nilai sifat tepat di tempat yang dinyatakan.

class Customer

{

public string FirstName { get; set; } = "Joydip";

public string LastName { get; set; } = "Kanjilal";

public int Age { get; set; } = 44;

}

Pada versi C # sebelumnya, anda mesti sering menggunakan konstruktor lalai untuk menetapkan nilai lalai pada sifat di kelas.

Berikut adalah contoh lain yang menggambarkan sintaks jalan pintas untuk menginisialisasi harta tanah pada titik pengisytiharan yang belum ditentukan.

class LogManager

{

public static LogManager Instance { get; } =

new LogManager();

}

Pemula kamus

Ciri ini membolehkan anda menginisialisasi nilai lalai dalam Kamus dengan kod yang lebih kurang. Berikut adalah contoh yang menggambarkan perkara ini.

class Program

{

static void Main(string[] args)

{

Dictionary dict = new Dictionary()

{

["USA"] = "Washington DC",

["England"] = "London",

["India"] = "New Delhi"

};

}

}

Seperti yang anda lihat dalam coretan kod di atas, kamus telah diinisialisasi dengan nilai lalai pada titik di mana ia telah dinyatakan. Pendekatan yang lebih baik berbanding dengan versi C # bahasa sebelumnya, bukan?

Pembina utama

Ini sekali lagi adalah ciri baru yang sangat baik - ia menghilangkan rasa sakit kerana perlu menulis kod untuk memulakan data anggota kelas dari parameter dalam kaedah konstruktor. Dengan kata lain, ciri ini menyediakan jalan pintas sintaksis untuk definisi pembina dalam kelas.

Berikut adalah contoh yang menggambarkan bagaimana pembina utama dapat digunakan.

class Employee(string firstName, string lastName, string address)

{

public string FirstName { get; set; } = firstName;

public string LastName { get; set; } = lastName;

public string Address { get; set; } = address;

}

Anda boleh merujuk artikel MSDN ini untuk maklumat lebih lanjut mengenai ciri dan penambahan baru di C # 6.