'readonly' ve 'const' Anahtar Kelimeleri
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 70.
C# değiştirilemeyen değerler oluşturmak için iki anahtar kelime sunar: const ve readonly. Her ikisi de değişikliği engellese de, farklı şekilde çalışırlar ve ayrı amaçlara hizmet ederler.
Bir const alanı bildirim sırasında atanmalıdır ve değeri derleme zamanında belirlenir. Örtük olarak statiktir, yani örneklere değil sınıfa aittir:
public class GameSettings
{
public const int MaxPlayers = 4;
public const double Gravity = 9.81;
}Sabitlere sınıf adı üzerinden erişirsiniz: GameSettings.MaxPlayers. Sabitler yalnızca ilkel tipler, dizeler ve null ile çalışır çünkü derleyicinin tam değeri bilmesi gerekir.
readonly alanına tanımlama sırasında veya bir oluşturucuda değer atanabilir ve değeri çalışma zamanında belirlenir:
public class Player
{
public readonly string Id;
public readonly DateTime CreatedAt = DateTime.Now;
public Player(string id)
{
Id = id;
}
}const ifadesinin aksine, readonly alanları herhangi bir türü tutabilir ve örneğe göre farklı değerlere sahip olabilir. Yapıcı tamamlandıktan sonra değer değiştirilemez.
Matematiksel sabitler gibi gerçekten evrensel olan ve asla değişmeyecek değerler için const kullanın. Bir kez ayarlanması gereken ancak nesneler arasında farklılık gösterebilen veya çalışma zamanı hesaplaması gerektiren değerler için readonly kullanın.
Görev
KolayEvrensel sabitler için const ile çalışma zamanında bir kez ayarlanan değerler için readonly kullanımının ne zaman uygun olduğunu gösteren bir fizik simülasyonu yapılandırma sistemi oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
PhysicsConstants.cs:PhysicsConstantsad alanında birSimulationsınıfı tanımlayın. Bu sınıf, hiç değişmeyen ve her yerde aynı olan evrensel sabitleri içermelidir:constolarak ayarlanmış birGravityalanı9.81constolarak ayarlanmış birSpeedOfLightalanı299792458constolarak ayarlanmış birGravityUnitstring"m/s^2"
Projectile.cs:Projectilead alanında birSimulationsınıfı tanımlayın. Her merminin oluşturulurken bir kez ayarlanması ve sonrasında hiç değiştirilmemesi gereken değerleri vardır:- Bir
readonlyalanıName(string) - Bir
readonlyalanıInitialVelocity(double) - Bir
readonlyalanıLaunchAngle(double, derece cinsinden) - Üç değerin tamamını kabul edip ayarlayan bir kurucu
- Maksimum yüksekliği şu formülü kullanarak hesaplayan bir
GetMaxHeight()yöntemi:(velocity^2 * sin^2(angle)) / (2 * gravity).Math.Sin()kullanın veMath.PI / 180ile çarparak dereceleri radyana dönüştürün
- Bir
Program.cs: Ana dosyanızda, giriş değerlerini kullanarak bir mermi oluşturun ve fizik sabitlerini, merminin hesaplanan maksimum yüksekliğiyle birlikte görüntüleyin.
Üç girdi alacaksınız:
- Mermi adı
- İlk hız (m/s cinsinden)
- Fırlatma açısı (derece cinsinden)
Çıktıyı şu biçimde yazdırın:
Gravity: {Gravity} {GravityUnit}
Speed of Light: {SpeedOfLight} m/s
Projectile: {Name}
Initial Velocity: {InitialVelocity} m/s
Launch Angle: {LaunchAngle} degrees
Max Height: {maxHeight} mMaksimum yüksekliği Math.Round(value, 2) kullanarak 2 ondalık basamağa yuvarlayın.
Örneğin girdiler Rocket, 50 ve 45 ise çıktı şu şekilde olmalıdır:
Gravity: 9.81 m/s^2
Speed of Light: 299792458 m/s
Projectile: Rocket
Initial Velocity: 50 m/s
Launch Angle: 45 degrees
Max Height: 63.71 mKendin dene
using System;
using Simulation;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string name = Console.ReadLine();
double velocity = Convert.ToDouble(Console.ReadLine());
double angle = Convert.ToDouble(Console.ReadLine());
// TODO: Giriş değerleri ile bir Projectile nesnesi oluşturun
// TODO: Fizik sabitlerini yazdırın (birimiyle birlikte Gravity, Speed of Light)
// TODO: Mermi bilgilerini yazdırın (Name, Initial Velocity, Launch Angle)
// TODO: Maksimum yüksekliği hesaplayın ve yazdırın (ondalık kısmı 2 basamağa yuvarlanmış şekilde)
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci KayıtlarıKendi başına pratik yap: Online C# derleyicisi