Record Türleri: Temeller ve Sözdizimi
Record sınıflarını ve record struct'ları bildirin, konumsal sözdizimini anlayın ve record'ları sınıflarla karşılaştırın.
Record Türleri: Temeller ve Sözdizimi, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Kayıt Türleri Nedir?
Kayıtlar (C# 9 ile tanıtılmıştır), değer anlambilimine sahip değişmez veriler için tasarlanmış başvuru türleridir. Özellik değerlerine dayalı eşitliği ve okunabilir bir ToString() yöntemini otomatik olarak oluşturur; ayrıca with ifadeleriyle yıkıcı olmayan değişiklikleri destekler.
Konumsal Kayıt Söz Dizimi
Konumsal söz dizimi en kısa biçimdir. Özellikler, oluşturucu, parçalarına ayırma ve eşitlik tek bir satırdan otomatik olarak oluşturulur.
// All in one line:
public record Point(double X, double Y);
public record Person(string FirstName, string LastName, int Age);
// Generated automatically:
// - Primary constructor: new Point(1.0, 2.0)
// - Deconstruct: var (x, y) = point;
// - Equality: p1 == p2 compares X and Y values
// - ToString: "Point { X = 1, Y = 2 }"Kayıtlar ve Sınıflar
Kayıtlar ve sınıflar, temel olarak varsayılan eşitlikleri ve amaçları bakımından farklıdır. Kayıtlar yapısal eşitlik (değerler), sınıflar ise başvuru eşitliği (kimlik) kullanır.
var p1 = new Point(1, 2);
var p2 = new Point(1, 2);
var p3 = p1;
// Record: structural equality
Console.WriteLine(p1 == p2); // True — same values
Console.WriteLine(p1 == p3); // True — same values
// Compare with a class:
var c1 = new PointClass(1, 2);
var c2 = new PointClass(1, 2);
Console.WriteLine(c1 == c2); // False — different referencesKayıt Yapıları
C# 10, değer türü kayıtları olan record struct yapısını ekler. Bunlar kayıt sınıflarıyla aynı eşitlik ve ToString özelliklerine sahiptir, ancak yapılar gibi yığın üzerinde ayrılır.
// Record struct: value type, stack-allocated
public record struct Color(byte R, byte G, byte B);
var red = new Color(255, 0, 0);
var red2 = new Color(255, 0, 0);
Console.WriteLine(red == red2); // True — value equality
// Readonly record struct: fully immutable
public readonly record struct Coord(double Lat, double Lng);Gövdeli Standart Kayıt Bildirimi
Kayıtlar tam bir gövdeye sahip olabilir; böylece otomatik eşitlik ve ToString özelliklerini korurken hesaplanan özellikler, yöntemler ve oluşturucuda doğrulama ekleyebilirsiniz.
public record Person(string FirstName, string LastName)
{
// Computed property
public string FullName => $"{FirstName} {LastName}";
// Validation in constructor
public Person : this(FirstName, LastName)
{
if (string.IsNullOrWhiteSpace(FirstName))
throw new ArgumentException("FirstName required");
}
// Method
public Person WithUpperCase() =>
this with { FirstName = FirstName.ToUpper(), LastName = LastName.ToUpper() };
}Kayıtlarla Kalıtım
Kayıtlar kalıtımı destekler. Türetilmiş bir kayıt daha fazla özellik ekler ve aynı eşitlik kurallarına katılır; iki kayıt yalnızca türleri ve tüm değerleri eşleşiyorsa eşittir.
public record Shape(string Color);
public record Circle(string Color, double Radius) : Shape(Color);
public record Rectangle(string Color, double Width, double Height) : Shape(Color);
var c1 = new Circle("red", 5.0);
var c2 = new Circle("red", 5.0);
var r1 = new Rectangle("red", 5.0, 3.0);
Console.WriteLine(c1 == c2); // True
Console.WriteLine(c1 == r1); // False — different typesKonumsal Olmayan Kayıt Özellikleri
Kayıtlar yalnızca konumsal parametrelerle sınırlı değildir. Konumsal ve elle tanımlanan özellikleri bir arada kullanabilir, varsayılan değerler için özellik başlatıcılarından yararlanabilirsiniz.
public record Order
{
public int Id { get; init; }
public string CustomerName { get; init; } = "";
public List<OrderLine> Lines { get; init; } = new();
public DateTime CreatedAt { get; init; } = DateTime.UtcNow;
public OrderStatus Status { get; init; } = OrderStatus.Pending;
}
// Initialization:
var order = new Order
{
Id = 42,
CustomerName = "Alice"
// Other props use defaults
};Parçalarına Ayırma
Konumsal kayıtlar, her konumsal özellik için Deconstruct yöntemini otomatik olarak oluşturur; böylece atamalarda ve desen eşleştirmede parçalarına ayrılabilirler.
public record Point(double X, double Y);
var p = new Point(3.0, 4.0);
// Deconstruction
var (x, y) = p;
Console.WriteLine($"x={x}, y={y}");
// In switch:
string Describe(Point pt) => pt switch
{
(0, 0) => "Origin",
(double x, 0) => $"On X-axis at {x}",
(0, double y) => $"On Y-axis at {y}",
var (px, py) => $"Point ({px}, {py})"
};DTO Olarak Kayıtlar
Kayıtlar API istek/yanıt DTO'ları için mükemmeldir. Değişmez ve serileştirilebilirdir; otomatik oluşturulan eşitlikleri de sınamayı kolaylaştırır.
// API request/response records
public record CreateProductRequest(
string Name,
decimal Price,
int Stock);
public record ProductResponse(
int Id,
string Name,
decimal Price,
int Stock,
DateTime CreatedAt);
// In controller:
app.MapPost("/products", (CreateProductRequest req, ProductService svc) =>
{
var product = svc.Create(req.Name, req.Price, req.Stock);
return Results.Created($"/products/{product.Id}",
new ProductResponse(product.Id, product.Name,
product.Price, product.Stock,
product.CreatedAt));
});Birim Sınamalarında Kayıt Eşitliği
Değer eşitliği, kayıtları birim sınaması doğrulamaları için ideal kılar. Beklenen ve gerçek kayıtları özel karşılaştırıcılar olmadan == veya Assert.Equal ile karşılaştırabilirsiniz.
[Fact]
public async Task CreateOrder_ReturnsCorrectResponse()
{
var response = await _client.PostAsJsonAsync("/orders",
new CreateOrderRequest(CustomerId: 1, ProductId: 5, Quantity: 2));
var order = await response.Content.ReadFromJsonAsync<OrderResponse>();
// Simple equality check — no custom IEqualityComparer needed!
Assert.Equal(
new OrderResponse(Id: order!.Id, Status: "Pending", Total: 99.98m),
order);
}Hızlı Denetim
C# kayıtları varsayılan olarak hangi eşitlik anlambilimini kullanır?
Özet: Kayıt Türlerinin Temelleri
Önemli noktalar:
- Kayıtlar, varsayılan olarak değer (yapısal) eşitliğine sahip başvuru türleridir
- Konumsal söz dizimi oluşturucuyu, parçalarına ayırmayı, eşitliği ve ToString'i oluşturur
record struct(C# 10), değer türü çeşididir- Kayıtlar kalıtımı destekler; eşitlik için türün de eşleşmesi gerekir
- DTO'lar, API sözleşmeleri ve birim sınaması doğrulamaları için idealdir
- Konumsal parametrelerin yanında bir gövde bloğuna hesaplanan özellikler ve yöntemler ekleyebilirsiniz
Sıkça Sorulan Sorular
“Record Türleri: Temeller ve Sözdizimi” dersi ücretsiz mi?
Evet — “Record Türleri: Temeller ve Sözdizimi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Record Türleri: Temeller ve Sözdizimi” dersinde ne öğreneceğim?
Record sınıflarını ve record struct'ları bildirin, konumsal sözdizimini anlayın ve record'ları sınıflarla karşılaştırın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Record Türleri: Temeller ve Sözdizimi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Record Türleri: Temeller ve Sözdizimi
- init ve with ile Değişmezlik
- Değer Eşitliği ve Yapıdan Çıkarma
- Alan Odaklı Tasarımda Record'lar