Tüm Makaleler,Bloglar, webigem Yazılım Şirketi

Blog Detay

Blog Images

C# 11'deki yenilikler

Aşağıdaki özellik Visual Studio 2022 sürüm 17.4'te kullanılabilir:

En son Visual Studio 2022'yi indirebilirsiniz. Tüm bu özellikleri tüm .NET indirmeleri sayfasından indirilebilen .NET 7 SDK'sının önizleme sürümüyle de deneyebilirsiniz.

Genel öznitelikler

Temel sınıfı olan genel bir sınıf System.Attribute bildirebilirsiniz. Bu özellik, parametre gerektiren öznitelikler için daha kullanışlı bir System.Type söz dizimi sağlar. Daha önce oluşturucu parametresi olarak bir özniteliğini alan bir Type öznitelik oluşturmanız gerekirdi:

C#
// Before C# 11:
public class TypeAttribute : Attribute
{
   public TypeAttribute(Type t) => ParamType = t;

   public Type ParamType { get; }
}

Özniteliğini uygulamak için şu typeof işleci kullanırsınız:

C#
[TypeAttribute(typeof(string))]
public string Method() => default;

Bu yeni özelliği kullanarak, bunun yerine genel bir öznitelik oluşturabilirsiniz:

C#
// C# 11 feature:
public class GenericAttribute<T> : Attribute { }

Ardından özniteliğini kullanmak için tür parametresini belirtin:

C#
[GenericAttribute<string>()]
public string Method() => default;

özniteliğini uygularken tüm tür parametrelerini sağlamanız gerekir. Başka bir deyişle, genel tür tam olarak oluşturulmalıdır.

C#
public class GenericType<T>
{
   [GenericAttribute<T>()] // Not allowed! generic attributes must be fully constructed types.
   public string Method() => default;
}

Tür bağımsız değişkenleri işleçle aynı kısıtlamaları typeof karşılamalıdır. Meta veri ek açıklamaları gerektiren türlere izin verilmez. Örneğin, tür parametresi olarak aşağıdaki türlere izin verilmez:

  • dynamic
  • string? (veya boş değer atanabilir herhangi bir başvuru türü)
  • (int X, int Y) (veya C# tanımlama grubu söz dizimi kullanan diğer tanımlama grubu türleri).

Bu türler meta verilerde doğrudan temsil edilmiyor. Türü açıklayan ek açıklamalar içerir. Her durumda, bunun yerine temel türü kullanabilirsiniz:

  • object için dynamic.
  • string yerine string?.
  • ValueTuple<int, int> yerine (int X, int Y).

Genel matematik desteği

Genel matematik desteğini etkinleştiren çeşitli dil özellikleri vardır:

  • static virtual arabirimlerdeki üyeler
  • denetlenen kullanıcı tanımlı işleçler
  • gevşek vardiya işleçleri
  • unsigned right-shift işleci

Aşırı yüklenebilir işleçler, diğer statik üyeler ve statik özellikler içeren arabirimleri tanımlamak için arabirimlere veya static virtual üyeleri ekleyebilirsinizstatic abstract. Bu özelliğin birincil senaryosu, matematiksel işleçleri genel türlerde kullanmaktır. Örneğin, arabirimini System.IAdditionOperators<TSelf, TOther, TResult> uygulayan bir türe uygulayabilirsiniz operator +. Diğer arabirimler diğer matematiksel işlemleri veya iyi tanımlanmış değerleri tanımlar. Arabirimler hakkındaki makalede yeni söz dizimi hakkında bilgi edinebilirsiniz. Yöntemleri içeren static virtual arabirimler genellikle genel arabirimlerdir. Ayrıca, çoğu tür parametresinin bildirilen arabirimi uyguladığını belirten bir kısıtlama bildirir.

Genel matematik, dilde başka gereksinimler oluşturmuştur.

  • unsigned right shift işleci: C# 11'den önce, imzasız bir sağa kaydırmayı zorlamak için, imzalı tamsayı türlerini imzasız bir türe atamanız, vardiyayı gerçekleştirmeniz ve ardından sonucu imzalı bir türe geri dönüştürmeniz gerekir. C# 11'de başlayarak, işaretsiz vardiya işlecini kullanabilirsiniz>>>.
  • esnek vardiya işleci gereksinimleri: C# 11, ikinci işlenenin veya örtük olarak dönüştürülebilir olması int gereksinimini intortadan kaldırır. Bu değişiklik, genel matematik arabirimlerini uygulayan türlerin bu konumlarda kullanılmasını sağlar.

Sayısal IntPtr ve UIntPtr

ve nintnuint türleri artık sırasıyla ve System.UIntPtr diğer adlarıdırSystem.IntPtr.

Dize ilişkilendirmelerindeki yeni satırlar

Dize ilişkilendirmesi için ve } karakterlerinin { içindeki metin artık birden çok satıra yayılabilir. ve } işaretçileri arasındaki { metin C# olarak ayrıştırılır. Yeni satırlar da dahil olmak üzere tüm yasal C#'lere izin verilir. Bu özellik, desen eşleştirme switch ifadeleri veya LINQ sorguları gibi daha uzun C# ifadeleri kullanan dize ilişkilendirmelerini okumayı kolaylaştırır.

Dil başvurusunun dize ilişkilendirmeleri makalesinde yeni satırlar özelliği hakkında daha fazla bilgi edinebilirsiniz.

Liste desenleri

Liste desenleri , desen eşleştirmeyi bir listedeki veya dizideki öğelerin dizileriyle eşleşecek şekilde genişletir. Örneğin, sequence is [1, 2, 3]true üç tamsayının (1, 2 ve 3) bir dizisi veya listesi olduğunda sequence . Sabit, tür, özellik ve ilişkisel desenler dahil olmak üzere herhangi bir desen kullanarak öğeleri eşleştirebilirsiniz. Atma deseni (_) tek bir öğeyle ve yeni aralık deseni (..) sıfır veya daha fazla öğe dizisiyle eşleşir.

Dil başvurusundaki desen eşleştirme makalesinde liste desenleri hakkında daha fazla bilgi edinebilirsiniz.

Temsilciye geliştirilmiş yöntem grubu dönüştürme

Yöntem grubu dönüştürmelerindeki C# standardı artık aşağıdaki öğeyi içerir:

  • Dönüştürmenin bu başvuruları içeren mevcut bir temsilci örneğini kullanmasına izin verilir (ancak gerekli değildir).

Standardın önceki sürümleri, derleyicinin bir yöntem grubu dönüştürmesi için oluşturulan temsilci nesnesini yeniden kullanmasını yasaklamıştır. C# 11 derleyicisi, bir yöntem grubu dönüştürmesinden oluşturulan temsilci nesnesini önbelleğe alır ve bu tek temsilci nesnesini yeniden kullanır. Bu özellik ilk olarak Visual Studio 17.2'de önizleme özelliği olarak kullanılabilir. İlk olarak .NET 7 önizleme 2 sürümünde kullanılabilir.

Ham dize değişmez değerleri

Ham dize değişmez değerleri, dize değişmez değerleri için yeni bir biçimdir. Ham dize değişmez değerleri boşluk, yeni satırlar, eklenmiş tırnak işaretleri ve kaçış dizileri gerektirmeden diğer özel karakterler de dahil olmak üzere rastgele metinler içerebilir. Ham dize değişmez değeri en az üç çift tırnak (""") karakterle başlar. Aynı sayıda çift tırnak karakteriyle biter. Açılış alıntısını izleyen ve kapanış tırnak işaretinden önceki yeni satırlar son içeriğe dahil değildir:

C#
string longMessage = """
    This is a long message.
    It has several lines.
        Some are indented
                more than others.
    Some should start at the first column.
    Some have "quoted text" in them.
    """;

Kapanış çift tırnaklarının solundaki herhangi bir boşluk dize değişmez bilgisinden kaldırılır. Ham dize değişmez değerleri, çıkış metnine ayraç eklemek için dize ilişkilendirmesiyle birleştirilebilir. Birden çok $ karakter, art arda kaç ayraç başlatılıp ilişkilendirmenin sona ereceğini belirtir:

C#
var location = $$"""
   You are at {{{Longitude}}, {{Latitude}}}
   """;

Yukarıdaki örnekte iki ayracın bir ilişkilendirmeyi başlatıp sonlandırdığını belirtir. Üçüncü yinelenen açma ve kapatma ayracı çıkış dizesine eklenir.

Desen eşleşmesi Span<char> veya ReadOnlySpan<char> sabitte string

Birkaç sürüm için desen eşleştirme kullanarak belirli string bir sabit değere sahip olup olmadığını test edebildiniz. Artık veya ReadOnlySpan<char>olan değişkenlerle Span<char> aynı desen eşleştirme mantığını kullanabilirsiniz.

Genişletilmiş kapsam adı

Tür parametre adları ve parametre adları artık bu yöntemdeki öznitelik bildirimindeki bir nameof ifadede kullanıldığında kapsam dahilindedir. Bu özellik, yöntem veya parametre bildirimindeki nameof bir öznitelikte yöntem parametresinin adını belirtmek için işlecini kullanabileceğiniz anlamına gelir. Bu özellik çoğu zaman null atanabilir analiz için öznitelik eklemek için kullanışlıdır.

UTF-8 dize değişmez değerleri

UTF-8 karakter kodlamasını u8 belirtmek için dize değişmez değeri üzerinde son eki belirtebilirsiniz. Uygulamanızın HTTP dize sabitleri veya benzer metin protokolleri için UTF-8 dizelerine ihtiyacı varsa, UTF-8 dizelerinin oluşturulmasını basitleştirmek için bu özelliği kullanabilirsiniz.

ref alanlar ve ref scoped değişkenler

içindeki ref struct alanları bildirebilirsinizref. Bu, özel öznitelikleri olmayan veya gizli iç türler gibi System.Span<T> türleri destekler.

Değiştiriciyi scoped herhangi bir ref bildirime ekleyebilirsiniz.

Kaynak:

https://learn.microsoft.com/tr-tr/

https://microsoft.com/