C# 10'daki yenilikler
C# 10, C# diline aşağıdaki özellikleri ve geliştirmeleri ekler:
- Kayıt yapıları
- Yapı türleri geliştirmeleri
- İlişkili dize işleyicileri
global using
Yönerge -leri- Dosya kapsamlı ad alanı bildirimi
- Genişletilmiş özellik desenleri
- Lambda ifadelerinde iyileştirmeler
- İlişkili dizelere izin ver
const
- Kayıt türleri mühürlenebilir
ToString()
- İyileştirilmiş kesin atama
- Aynı yapıda hem atamaya hem de bildirime izin ver
- Yöntemlerde özniteliğine izin ver
AsyncMethodBuilder
- CallerArgumentExpression özniteliği
#line
Gelişmiş pragma- Uyarı dalgası 6
C# 10, .NET 6'da desteklenir. Daha fazla bilgi için bkz . C# dil sürümü oluşturma.
En son .NET 6 SDK'sını .NET indirmeleri sayfasından indirebilirsiniz. .NET 6 SDK'sını içeren Visual Studio 2022'yi de indirebilirsiniz.
Not
Bu özelliklerle ilgili geri bildirimlerinizle ilgileniyoruz. Bu yeni özelliklerden herhangi biriyle ilgili sorunlar bulursanız dotnet/roslyn deposunda yeni bir sorunoluşturun.
Kayıt yapıları
veya readonly record struct
bildirimlerini kullanarak record struct
değer türü kayıtlarını bildirebilirsiniz. Artık bildirimiyle record class
a'nın record
bir başvuru türü olduğunu netleştirebilirsiniz.
Yapı türleri geliştirmeleri
C# 10, yapı türleriyle ilgili aşağıdaki iyileştirmeleri sunar:
- Yapı türünde bir örnek parametresiz oluşturucu bildirebilir ve bildirimde bir örnek alanı veya özelliği başlatabilirsiniz. Daha fazla bilgi için Yapı türleri makalesinin Yapı başlatma ve varsayılan değerler bölümüne bakın.
- İfadenin
with
sol işleneni herhangi bir yapı türünde veya anonim (başvuru) türünde olabilir.
İlişkili dize işleyicisi
İlişkili bir dize ifadesinden elde edilen dizeyi oluşturan bir tür oluşturabilirsiniz. .NET kitaplıkları bu özelliği birçok API'de kullanır. Bu öğreticiyi izleyerek bir tane oluşturabilirsiniz.
Genel kullanım yönergeleri
Derleyiciye yönergenin derlemedeki global
tüm kaynak dosyalar için geçerli olduğunu bildirmek için değiştiriciyi herhangi bir using yönergesine ekleyebilirsiniz. Bunlar genellikle bir projedeki tüm kaynak dosyalardır.
Dosya kapsamlı ad alanı bildirimi
Bildirimin namespace
yeni bir biçimini kullanarak, aşağıdaki tüm bildirimlerin bildirilen ad alanının üyeleri olduğunu bildirebilirsiniz:
namespace MyNamespace;
Bu yeni söz dizimi, bildirimler için namespace
hem yatay hem de dikey alandan tasarruf sağlar.
Genişletilmiş özellik desenleri
C# 10'da başlayarak, bir özellik deseni içindeki iç içe özelliklere veya alanlara başvurabilirsiniz. Örneğin, formun deseni
{ Prop1.Prop2: pattern }
C# 10 ve sonraki sürümlerde geçerlidir ve
{ Prop1: { Prop2: pattern } }
C# 8.0 ve sonraki sürümlerde geçerlidir.
Daha fazla bilgi için Bkz . Genişletilmiş özellik desenleri özellik teklifi notu. Özellik deseni hakkında daha fazla bilgi için Desenler makalesinin Özellik düzeni bölümüne bakın.
Lambda ifadesi geliştirmeleri
C# 10, lambda ifadelerinin nasıl işleneceğini gösteren birçok geliştirme içerir:
- Lambda ifadeleri, derleyicinin lambda ifadesinden veya yöntem grubundan temsilci türü çıkarabildiği doğal bir türe sahip olabilir.
- Derleyici çıkaramayınca Lambda ifadeleri bir dönüş türü bildirebilir.
- Öznitelikler lambda ifadelerine uygulanabilir.
Bu özellikler lambda ifadelerini yöntemlere ve yerel işlevlere daha benzer hale getirir. Temsilci türünde bir değişken bildirmeden lambda ifadelerini kullanmayı kolaylaştırır ve yeni ASP.NET Temel Minimum API'lerle daha sorunsuz çalışırlar.
Sabit ilişkilendirilmiş dizeler
C# 10'da, const
tüm yer tutucular kendilerinin sabit dizeleriyse dize ilişkilendirmesi kullanılarak dizeler başlatılabilir. Dize ilişkilendirmesi, uygulamanızda kullanılan sabit dizeler oluştururken daha okunabilir sabit dizeler oluşturabilir. Bu sabitler çalışma zamanında dizelere dönüştürüldüğünden yer tutucu ifadeler sayısal sabitler olamaz. Geçerli kültür, dize gösterimini etkileyebilir. İfadeler hakkındaki dil başvurusunda const
daha fazla bilgi edinin.
Kayıt türleri ToString'i mühürleyebilir
C# 10'da, kayıt türünde geçersiz kıldığınızda ToString
değiştiriciyi sealed
ekleyebilirsiniz. yönteminin ToString
mühürlenmesi, derleyicinin türetilmiş kayıt türleri için bir ToString
yöntemi sentezlemesini engeller. A sealed
ToString
, türetilmiş tüm kayıt türlerinin ToString
ortak bir temel kayıt türünde tanımlanan yöntemi kullanmasını sağlar. Bu özellik hakkında daha fazla bilgiyi kayıt makalesinde bulabilirsiniz.
Aynı yapısızlaştırmada atama ve bildirim
Bu değişiklik, önceki C# sürümlerinden bir kısıtlamayı kaldırır. Daha önce, bir yapısızlaştırma tüm değerleri mevcut değişkenlere atayabilir veya yeni bildirilen değişkenleri başlatabilirdi:
// Initialization:
(int x, int y) = point;
// assignment:
int x1 = 0;
int y1 = 0;
(x1, y1) = point;
C# 10 bu kısıtlamayı kaldırır:
int x = 0;
(x, int y) = point;
İyileştirilmiş kesin atama
C# 10'dan önce, kesin atama ve null durum analizinin hatalı pozitif uyarılar ürettiği birçok senaryo vardı. Bunlar genellikle boole sabitleriyle karşılaştırmalar, yalnızca bir deyimdeki true
veya false
deyimlerindeki if
bir değişkene erişme ve null birleşim ifadeleri içerir. Bu örnekler C# öğesinin önceki sürümlerinde uyarılar oluşturdu, ancak C# 10'da yok:
string representation = "N/A";
if ((c != null && c.GetDependentValue(out object obj)) == true)
{
representation = obj.ToString(); // undesired error
}
// Or, using ?.
if (c?.GetDependentValue(out object obj) == true)
{
representation = obj.ToString(); // undesired error
}
// Or, using ??
if (c?.GetDependentValue(out object obj) ?? false)
{
representation = obj.ToString(); // undesired error
}
Bu geliştirmenin temel etkisi, kesin atama ve null durum analizine yönelik uyarıların daha doğru olmasıdır.
Yöntemlerde AsyncMethodBuilder özniteliğine izin ver
C# 10 ve sonraki sürümlerde, belirli bir görev benzeri tür döndüren tüm yöntemler için yöntem oluşturucu türünü belirtmeye ek olarak, tek bir yöntem için farklı bir zaman uyumsuz yöntem oluşturucu belirtebilirsiniz. Özel bir zaman uyumsuz yöntem oluşturucusu, belirli bir yöntemin özel oluşturucudan yararlanabileceği gelişmiş performans ayarlama senaryolarını etkinleştirir.
Daha fazla bilgi edinmek için derleyici tarafından okunan öznitelikler hakkındaki makalenin üzerindeki AsyncMethodBuilder
bölümüne bakın.
CallerArgumentExpression öznitelik tanılaması
derleyicinin System.Runtime.CompilerServices.CallerArgumentExpressionAttribute yerine başka bir bağımsız değişkenin metin gösterimini koyacak bir parametre belirtmek için kullanabilirsiniz. Bu özellik kitaplıkların daha belirli tanılamalar oluşturmasını sağlar. Aşağıdaki kod bir koşulu test ediyor. Koşul false ise, özel durum iletisi öğesine geçirilen bağımsız değişkenin metin gösterimini condition
içerir:
public static void Validate(bool condition, [CallerArgumentExpression("condition")] string? message=null)
{
if (!condition)
{
throw new InvalidOperationException($"Argument failed validation: <{message}>");
}
}
Dil başvurusu bölümündeki Arayan bilgileri öznitelikleri makalesinde bu özellik hakkında daha fazla bilgi edinebilirsiniz.
Gelişmiş #line pragması
C# 10, pragma için #line
yeni bir biçimi destekler. Büyük olasılıkla yeni biçimi kullanmayacaksınız, ancak etkilerini göreceksiniz. Geliştirmeler, Razor gibi etki alanına özgü dillerde (DLL) daha ayrıntılı çıkış sağlar. Razor altyapısı, hata ayıklama deneyimini geliştirmek için bu geliştirmeleri kullanır. Hata ayıklayıcıların Razor kaynağınızı daha doğru vurgulayabildiğini göreceksiniz. Yeni söz dizimi hakkında daha fazla bilgi edinmek için dil başvurusundaki Önişlemci yönergeleri makalesine bakın. Razor tabanlı örneklerin özellik belirtimini de okuyabilirsiniz.