
1 – AUTO PROPERTY
public class Customer { public string First { get; set; } = “Yazilim”; public string Last { get; set; } = “Bakanligi”; }
C# 6.0 ile birlikte oluşturduğumuz sınıflar içerisinde oluşturduğumuz propertylerimize default değerler verebiliyoruz. C# 6.0 dan önce bunu yapmak isteseydik üst satırlarda bir field’ımız olması gerekirdi ve get set ile onu kullanırdık.
public class Customer { public string First { get; } = “Yazilim”; public string Last { get; } = “Bakanligi”; }
Burada da sadece Getter only bir propertymiz var. C#6.0 öncesinde böyle bir tanımlama yapmamız mümkün değildi. Getter only property sayesinde readonly bir property yapmış oluyoruz. Bir örnek daha verelim
public class Customerpublic string Name { get; };public Customer(string first, string last){Name = first + ” ” + last;}}
Bu örneğimizde de readonly dışında bir kullanım görmüş olduk.
2 – EXPRESSION BODIED FUNCTION MEMBERS
Lambda işareti ile geneleksel metot gövdesi yerine geçecek bir ifade tanımlayabilirim.
Expression bodies on property-like function members:
public string Name => “OMER”;
Expression bodies on method-like members:
public string GetName(string name, string surname) => name + surname;
Burada yapmış olduğum aslında şu;
public string GetName(string name, string surname){return name + surname;}
3 – USING STATIC
Namespace gibi namespace altındaki static classlarımızıda ekleyebileceğiz.
using System.Console;using System.Math;class Program{static void Main(){WriteLine(Sqrt(3*3 + 4*4));}}
4 – NULL-CONDITIONAL OPERATORS
NULL kontrollerini daha pratik yapmak için;
int? length = users?.Length; <strong>// eğer users null ise null atar değil ise customers.Length’ı atar.</strong>nt length = users?.Length ?? 0; <strong>// Eğer users null ise sıfır atar değil ise .Length’i atar.</strong>
5 – STRING INTERPOLATION
var s = String.Format(“{0} is {1} year{{s}} old”, p.Name, p.Age); //<strong> Önceki Hali</strong>var s = “\{p.Name} is \{p.Age} year{s} old”; // <strong>Şu anki şekil</strong>
6 – NAMEOF EXPRESSIONS
İhtiyaç olan konulardan bir tanesiydi. Ciddi manada bizim için sorun niteliği taşıyordu. Fakat güzel bir çözüm üretilmiş.
(if x == null) throw new ArgumentNullException(“x”); //<strong> Önceki Hali</strong>(if x == null) throw new ArgumentNullException(nameof(x));// <strong>Şu anki şekil</strong>
7 – INDEX INITIALIZERS
Şaşırdığım özelliklerden bir tanesi aslına bakarsanız. Kolay bir şekilde indexlemeye yarıyor.
var nums= new Dictionary<int, string>{[1] = “one”,[3] = “tree”,[7] = “seven”};
8 – EXCEPTION FILTERS
Catch bloğu içerisinde bir if ifadesi kullanmak, biraz zahmetliydi. Bunun yerine VB ve F# tarafında kolay kullanım şekilleri mevcuttu. C# 6.0 ile bu da gelmiş oldu. VB’cilere karşı artık bir adım daha avantajlıyız.
try { falan filan }catch (SqlException e) if (e.ErrorCode > 999)
9 – AWAIT IN CATCH AND FINALLY BLOCKS
C# 5.0 ile gelen ve öve öve anlattığımız async await özelliğini kullanmaya başladıkça finally ve catch bloklarında bazı engellerin olduğunu biliyorduk. Burada bizi çok beklettiğini biliyoruz. C# 6.0 ile bundan kurtulmuş olduk.
Resource resx = null;try{resx = await Resource.OpenAsync(…); //<strong> Önceki Hali</strong>}catch(ResourceException e){await Resource.LogAsync(resx, e); // <strong>Şu anki şekil</strong>}finally{if (res != null) await res.CloseAsync(); // <strong>Şu anki şekil</strong>}
10 – PARAMETERLESS CONSTRUCTORS IN STRUCTS
C#’ın önceki versiyonlarını düşünecek olursak parametre alamayan structs kurucular tanımlayamadığımızı hatırlıyor olmalısınız. Bazı konularda bize ciddi manada zorluklar yaşatıyordu. Fakat C# 6.0 ile bunu çok basit bir şekilde yapabiliriyoruz.
struct Person { public string Name { get; } public int Age { get; } public Person(string isim, int yas)<strong>//Önceki Hali</stron>