Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
C# ile Class ve Object: İlk Kendi Tipini Yazmak
Class bir tarif, object onun bellekteki ürünü. Field ve method'larla ilk Book class'ı, this, reference type olmanın anlamı, == ile kimlik karşılaştırması, null ve NullReferenceException, class'ların dosya ve namespace düzeni.
C#'ta Field, Property ve Constructor: Object'i Doğru Kurmak
Kendi constructor'ını yazınca kaybolan parametresiz constructor, private ve readonly field'lar, doğrulama yapan property, auto-property, get-only, private set, init ve hesaplanan property, constructor zincirleme ve initializer'ların çalışma sırası.
C#'ta Encapsulation ve Access Modifier'lar: public, private, protected, internal
Get-only bir List property'sinin neden hiçbir şeyi korumadığı, invariant'ları object'in içinde tutmak, IReadOnlyList ve AsReadOnly farkı, altı access modifier ve varsayılanları, private'ın tipe ait olması, internal ve InternalsVisibleTo ile assembly sınırı.
C#'ta static Member'lar, static Class ve Extension Method
Tipe ait static field ve method'lar, static method'da this'in yokluğu, const ile static readonly farkı ve static constructor'ın ne zaman çalıştığı, static class, ISBN doğrulayan bir extension method, extension kuralları ve paylaşılan static durumun thread tuzağı.
C#'ta Inheritance: base, sealed ve Constructor Zinciri
Product, Book ve EBook ile inheritance: derived class'ın gördükleri ve protected, base ile constructor zinciri ve field initializer'ların ters sırası, upcast, downcast, is ve as, sealed ile türetmeyi durdurmak ve List'ten derive eden bir Order'ın encapsulation'ı nasıl bozduğu.
C#'ta Polymorphism: virtual, override, new ve abstract Class
virtual ve override ile kararı runtime'ın vermesi, kargo ücretiyle if'siz bir sepet döngüsü, base çağrısı ve ToString override, new ile gizleme ve CS0114 tuzağı, abstract class ve template method, sealed override ve constructor'dan virtual method çağırmanın NullReferenceException'ı.
C#'ta Interface: Çoklu ve Explicit Implementation, Default Interface Method
Interface bir contract: CS0535 ve CS0144, bir class'ın birden çok interface'i implement etmesi, aynı isimli member'lar için explicit implementation ve BCL'deki örnekleri, yalnızca interface üzerinden çağrılan default interface method'lar, abstract class ile seçim ve saati interface'e alarak test edilebilir kod.
C#'ta struct ve class Farkı: Kopyalama Semantiği ve readonly struct
Struct bir value type: property, indexer ve foreach'te gizlenen kopyalar, C# 10'da parametresiz constructor ile default farkı, struct'ların inheritance kuralları, readonly struct ve with ile immutable Money, boxing'in yarattığı ikinci kopya, struct eşitliği ve bir tipi ne zaman struct yapacağın.
C# record ve record struct: Value Equality ve with Expression'ı
Derleyicinin record için ürettiği member'lar, with ile kopyalayarak değiştirmek, positional ve nominal record, inheritance'ta EqualityContract, C# 10'un record struct'ı ve record'u ne zaman seçeceğin.
C#'ta Eşitlik ve Karşılaştırma: Equals, GetHashCode, IEquatable ve IComparable
Reference ve value equality, Equals ile GetHashCode contract'ı, IEquatable<T> ve == operatörü, struct'larda eşitlik, IComparable<T> ile sıralama ve dışarıdan karar veren comparer'lar.
C#'ta Operator Overloading ve Indexer
Operatörlerin static method olduğu ve bunun getirdiği tuzak, Money için aritmetik ve karşılaştırma operatörleri, compiler kuralları, implicit/explicit dönüşümler, indexer'lar ve Index/Range desteği.
C#'ta Composition ve SOLID'e Giriş
List'ten derive eden bir sepetin kuralları nasıl deldiği, composition ile sahip olmak, SOLID'in beş prensibi Bookstore örnekleriyle ve prensipleri aşırıya kaçırmanın bedeli.