Tag Archives: c# 10 yenilikleri

C# 10 Yenilikleri – Mix declarations and variables in deconstruction

C# 10 versiyonu ile gelen özelliklerden biri de “mix declarations and variables in deconstruction” kavramı.

C# 9 ve öncesi versiyonlarda deconstruction‘lar içerisinde ya hepsinin daha önceden tanımlanmış olması, ya da hepsinin yeni tanımlanıyor olması gerekiyordu.

(int, int, int) rgb = (255, 255, 0);
(int first, int second, int third) myRgb = rgb;

ya da;

int r1, g1, b1;
(r1, g1, b1) = rgb;

şeklinde tanımlanabiliyordu. C# 10 ile birlikte, bu tanımlamaların bir kısmını orada, bir kısmını ise daha öncesinde tanımlayabiliyorsunuz.

Yani;

int r2, g2;
(r2, g2, int b2) = rgb;

gibi. Gördüğünüz gibi r2 ve g2 değişkenlerimi kodumun farklı bir yerinde tanımlayıp, b2 değişkenimi deconstruction içinde tanımlayabiliyorum.

Kaynak: https://devblogs.microsoft.com/dotnet/welcome-to-csharp-10/#mix-declarations-and-variables-in-deconstruction

C# 10 Yenilikleri – File Scoped Namespaces

C# 9 ve önceki versiyonlarda Visaul Studio içerisinde yeni bir sınıf oluşturduğunuzda namespace’ler “Blocked scoped” olarak ekleniyordu. Yani namespsace’lerde süslü parantezler içerisinde ve tüm class’lar da soldan bir tab (veya 4 boşluk) olacak şekilde hizalanıyordu.

namespace NET6
{
    internal class Class1
    {
    }
}

C# 10 versiyonu ile hayatımıza File scoped namespaces kavramı girdi. Bu sayede namespace tanımlamalarındaki gereksiz süslü parantezlerden ve bu namespace’in içerisindeki her bir satır kodun başındaki gereksiz boşluklardan kurtulma imkanı sunuldu geliştiricilere. Bunun için .editorconfig dosyası içerisinde “Code Style” sekmesindeki “Namespace declarations” özelliğini “File scoped” olarak değiştirmeniz yeterli. Tabi bu değişiklik var olan sınıflarınızı etkilemiyor, yeni eklediğiniz sınıflarda geçerli.

namespace NET6;

internal class Class2
{
}

Bu videoyu çekerken aspnetcore projesinde tamamen bu yapıya geçildiğini şu commit ile görebilirsiniz. 5000’in üzerinde dosyada değişiklik yapılarak düzenleme yapılmış: https://github.com/dotnet/aspnetcore/pull/38076

Kaynak:

File Scoped Namespaces: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/file-scoped-namespaces