Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
C# ve .NET Sürüm Yükseltme: Eski Projeyi .NET 10'a Taşımak
Bir .NET 6 projesini .NET 10'a taşımak: destek takvimi, LangVersion ile TFM ilişkisi ve latest tuzağı, global.json ile SDK sabitleme, gerçek CS8981 ve CS9258 uyarılarını okumak, field keyword'ünün sessiz davranış değişikliği ve breaking change sayfalarını okumak; C# 15 için ayrı yazı.
C# 14 Yenilikleri: Extension Members, field ve Null-Conditional Atama
C# 10 ve C# 13'teki karşılıklarıyla C# 14: null-conditional atamada sağ tarafın atlanması, extension property, static extension member ve extension operatör, field keyword'ü, array'lerin span'e dönüşümü, nameof(List<>), lambda parametre modifier'ları, partial constructor/event ve compound atama operatörleri.
C# 13 Yenilikleri: params Collections, Lock ve Partial Property
C# 10'daki karşılıklarıyla C# 13: yeni Lock tipi ve CS9216 tuzağı, allocation ölçümüyle params collections, ref struct'ların interface implemente etmesi ve allows ref struct, partial property'ler, OverloadResolutionPriority, \e kaçışı ve initializer'da ^ index'i.
C# 12 Yenilikleri: Primary Constructor ve Collection Expression
C# 10'daki karşılıklarıyla C# 12: primary constructor'ın parametre olup property olmaması ve CS9124 uyarısı, köşeli parantezli collection expression'lar ve spread, lambda'larda default parametreler, her tipe alias, inline array'ler, Experimental attribute ve interceptors notu.
C# 11 Yenilikleri: Raw String, required ve List Pattern
C# 10'da nasıl yazıyorduk, C# 11'de nasıl yazıyoruz: raw string literal'ler ve kültür tuzağı, required member'lar ve SetsRequiredMembers, list pattern'ler, dil ve kütüphane ayağıyla generic math, file-local tipler ve UTF-8 literal'ler.
C# Sürümleri: 1.0'dan 10'a Dilin Kısa Tarihi
C# 1.0'dan C# 10'a her sürümün imza özellikleri, çıkış tarihleri ve .NET eşleşmesi; aynı kodu farklı LangVersion değerleriyle derleyip compiler'ın hangi özelliğin hangi sürümden geldiğini nasıl söylediğini görmek.
C#'ta Unit Test: xUnit, Theory/InlineData ve Test Edilebilir Kod
Flaky bir testin sebebi olan gizli bağımlılıklar, xUnit test projesi, Fact ve Assert, Theory/InlineData/MemberData, zamanı IClock ile dışarıdan almak ve decimal InlineData, async void gibi tuzaklar.
C#'ta Dependency Injection Temelleri: Lifetime'lar, Container ve Captive Dependency
Microsoft.Extensions.DependencyInjection ile constructor injection, singleton/scoped/transient farkı, container'ın dispose sorumluluğu, captive dependency ve ValidateScopes, çoklu registration, TryAdd ve factory'ler.
C#'ta Performans: Allocation, Struct'lar ve BenchmarkDotNet ile Ölçmek
Stopwatch'un neden yetmediği, BenchmarkDotNet 0.15.8 kurulumu ve tabloyu okumak, class ile struct'ın ölçülmüş farkı, boxing ve closure kaynaklı gizli allocation'lar ve benchmark tuzakları.
C#'ta Source Generator: IIncrementalGenerator ile Compile Time'da Kod Üretmek
Derleme sırasında kod ekleyen bir incremental generator yazmak: netstandard2.0 projesi ve Roslyn sürümü, pipeline ve cache, üretilen kodu görmek, partial ve hint name tuzakları.
C#'ta Interop ve unsafe Kod: P/Invoke, Pointer'lar ve fixed
AllowUnsafeBlocks ve pointer'lar, fixed ile GC'ye karşı sabitlemek, DllImport ile libc çağırmak, string marshalling, function pointer ile callback, NativeMemory ve span ile unsafe kodu küçük tutmak.
C#'ta ref return, ref local, in Parametreleri ve ref struct
Değeri kopyalamak yerine referansıyla taşımak: ref local, ref return, ref readonly, in parametrelerinde defensive copy tuzağı, readonly struct ve kendi ref struct tipini yazmak.