C# 11 ile Birlikte Gelen Yenilikler

Bedirhan Kaplan
4 min readDec 23, 2023
Photo by Arnold Francisca on Unsplash

C# 11 ile birlikte gelen yeni özelliklerin çoğu, saf performansa odaklanmış durumdadır diyebiliriz. Önceki sürümlerine göre %73.5'e kadar daha hızlı olduğu belirtilmektedir. Kodlama şeklinizi değiştirecek birçok iyileştirme bulunmaktadır. Bu makalede, C# 11 özelliklerini tümüyle kod örnekleriyle listeleyeceğim. Vakit ayırdığın için teşekkürler. Birlikte başlayalım.

Required Members

Gelen bu değişiklik özelliklere ve alanlara, zorunlu bir değiştirici ekler; bu da başlatıcıların ve çağrıların bu değerler ile başlatmasına zorlar. SetsRequiredMembersAttribute, bir yapıcı metodun tüm gerekli üyeleri başlattığını derleyiciye bildirmek için yapıcı metotlara eklenebilir.

public class Person
{
public Person() { }

[SetsRequiredMembers]
public Person(string name, string surname)
{
Name = name;
Surname = surname;
}

[SetsRequiredMembers]
public Person(string name) => Name = name;

public Guid Id { get; set; } = Guid.NewGuid();
//Name required
public required string Name { get; set; }
public string Surname { get; set; }
public string PhoneNumber { get; set; }
}
using CSharpFeatures;

var p1 = new Person { Name = "Bedirhan", Surname = "Kaplan" };
Person p2 = new("Bedirhan", "Kaplan");

var p3 = new Person { Name = "Bedirhan" };
//Hata verecektir. Default constructor olsa dahi Name alanı required
//olarak işaretlenmiştir.
Person p4 = new();

Raw String Literals

Ham dize kümeleri, dize kümeleri için yeni bir biçimidir. Ham dize kümeleri, kaçış dizileri gerektirmeksizin boşluk, yeni satırlar, gömülü alıntılar ve diğer özel karakterleri içerebilen her türlü metni içerebilir. Bir ham dize kümeleri en az üç çift tırnak karakteri ile başlar. Aynı sayıda çift tırnak karakteri ile biter. Genellikle bir ham dize kümeleri, dizeyi başlatmak için tek bir satırda üç çift tırnak kullanır ve dizeyi sonlandırmak için ayrı bir satırda üç çift tırnak kullanır. Açılış tırnak karakterini takip eden yeni satırlar ve kapanış tırnak karakterini takip eden yeni satırlar, nihai içeriğe dahil edilmez.

string longMessage = """
Bu uzun bir ileti.
Birkaç satıra sahip.
Bazıları girintili
diğerlerinden daha fazla.
Bazıları ilk sütunda başlamalı.
Bazılarında içinde "alıntılanmış metin" bulunuyor.
""";
Console.WriteLine(longMessage);
Console.ReadKey();
Console Çıktısı

Kapanan çift tırnakların solundaki herhangi bir boşluk, dize kümelerinden kaldırılacaktır. Ham dize kümeleri, süslü parantezleri çıktı metnine dahil etmek için dize içlemesi ile birleştirilebilir. Birden çok $ karakteri, içlemeyi başlatan ve bitiren süslü parantez sayısını belirtir.

string location = $$"""
Konumun {{longitude}}, {{latitude}}
""";

Generic Attributes

System.Attribute türünden türetilmiş bir temel sınıfa sahip generic bir sınıfı bildirebilirsiniz. Bu özellik, bir System.Type parametresi gerektiren öznitelikler için daha uygun bir sözdizimi sağlar. Daha önce, bir Type ı constructor parametresi olarak alan öznitelik oluşturmanız gerekiyordu. Özniteliği uygularken tüm tür parametrelerini sağlamanız gerekmektedir. Başka bir deyişle, generic tip tamamen oluşturulmuş olmalıdır.

public class GenericAttribute<T> : Attribute
{
private T category { get; set; }
private T menu { get; set; }

public GenericAttribute(T category, T menu)
{
this.category = category;
this.menu = menu;
}

public T Category
{
get
{
return category;
}
}
public T Menu
{
get
{
return menu;
}
}
}
public class GenericClass
{
[GenericAttribute<string>("Teknoloji", "Elektronik")]
public string GetCategory() => default;

[GenericAttribute<int>(3, 4)]
public string SubMenuOfMenu() => default;
}

List Patterns

Liste desenleri, desen eşleme yeteneğini bir liste veya bir dizideki öğe dizileriyle eşleştirmeyi genişletir. Örneğin, sequence [1, 2, 3] ifadesi doğrudur, üç tamsayının (1, 2 ve 3) bir dizisi veya listesi olduğunda. Herhangi bir deseni içeren, sabit, tür, özellik ve ilişkisel desenler dahil olmak üzere desenleri kullanabilirsiniz. Reddetme deseni (_) herhangi bir tek öğeyi eşleştirir ve yeni aralık deseni (..), sıfır veya daha fazla öğe dizisini eşleştirir.

public class Categorie
{
public List<string> Categories = new()
{
"Elektronik",
"Ev Aletleri",
"Ofis",
"Gıda"
};

public string[] NewCategories = new string[]
{
"Elektronik",
"Ev Aletleri",
"Ofis",
"Gıda",
"Yemek"
};
}
if (menu.NewCategories is [_, "Ev Aletleri", .. var betweenHomeAndFood, "Yemek"])
{
foreach (var categorie in betweenHomeAndFood)
{
Console.WriteLine($"Ev Aletleri ve Yemek kategorisinin arasında {categorie} kategorisi yer almaktadır.");
}
}
else
{
Console.WriteLine("Ev Aletleri ve Yemek kategorisinin arasında kategori yer almamaktadır.");
}
Konsol Çıktısı

--

--

Bedirhan Kaplan

Software Engineer‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏ United Payment ‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏ .NET‏‏‏‏‏‏‏‏ ‏‏‏‏‏‏‏‏ & CCNB Developer