Menu
Coddy logo textTech

'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.

challenge icon

Görev

Kolay

Evrensel 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: PhysicsConstants ad alanında bir Simulation sınıfı tanımlayın. Bu sınıf, hiç değişmeyen ve her yerde aynı olan evrensel sabitleri içermelidir:
    • const olarak ayarlanmış bir Gravity alanı 9.81
    • const olarak ayarlanmış bir SpeedOfLight alanı 299792458
    • const olarak ayarlanmış bir GravityUnit string "m/s^2"
  • Projectile.cs: Projectile ad alanında bir Simulation sı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 readonly alanı Name (string)
    • Bir readonly alanı InitialVelocity (double)
    • Bir readonly alanı 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 ve Math.PI / 180 ile çarparak dereceleri radyana dönüştürün
  • 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} m

Maksimum 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 m

Kendin 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)
    }
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C# derleyicisi