
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.
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:
// 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:
[TypeAttribute(typeof(string))]
public string Method() => default;
Bu yeni özelliği kullanarak, bunun yerine genel bir öznitelik oluşturabilirsiniz:
// C# 11 feature:
public class GenericAttribute<T> : Attribute { }
Ardından özniteliğini kullanmak için tür parametresini belirtin:
[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.
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ğini etkinleştiren çeşitli dil özellikleri vardır:
static virtual
arabirimlerdeki üyelerAşı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.
>>>
.int
gereksinimini int
ortadan kaldırır. Bu değişiklik, genel matematik arabirimlerini uygulayan türlerin bu konumlarda kullanılmasını sağlar.IntPtr
ve UIntPtr
ve nint
nuint
türleri artık sırasıyla ve System.UIntPtr diğer adlarıdırSystem.IntPtr.
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 , 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.
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, 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:
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:
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.
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.
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 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şkenleriç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/