Kata Kunci 'readonly' & 'const'
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 16 dari 70.
C# menyediakan dua kata kunci untuk membuat nilai yang tidak dapat berubah: const dan readonly. Meskipun keduanya mencegah perubahan, cara kerjanya berbeda dan keduanya memiliki tujuan yang berbeda.
Field const harus diberi nilai saat deklarasi, dan nilainya ditentukan pada waktu kompilasi. Field ini secara implisit bersifat static, artinya dimiliki oleh class, bukan oleh instance:
public class GameSettings
{
public const int MaxPlayers = 4;
public const double Gravity = 9.81;
}Kamu mengakses konstanta melalui nama class: GameSettings.MaxPlayers. Konstanta hanya berfungsi dengan tipe primitif, string, dan null karena compiler harus mengetahui nilai yang tepat.
Field readonly dapat diberi nilai saat deklarasi atau di dalam konstruktor, dan nilainya ditentukan saat runtime:
public class Player
{
public readonly string Id;
public readonly DateTime CreatedAt = DateTime.Now;
public Player(string id)
{
Id = id;
}
}Tidak seperti const, field readonly dapat menyimpan tipe apa pun dan dapat memiliki nilai yang berbeda untuk setiap instance. Setelah constructor selesai, nilainya tidak dapat berubah.
Gunakan const untuk nilai yang benar-benar universal dan tidak akan pernah berubah, seperti konstanta matematika. Gunakan readonly untuk nilai yang harus ditetapkan satu kali, tetapi mungkin berbeda antarobjek atau perlu dihitung saat runtime.
Tantangan
MudahMari buat sistem konfigurasi simulasi fisika yang menunjukkan kapan harus menggunakan const untuk konstanta universal dan kapan menggunakan readonly untuk nilai yang ditetapkan sekali saat program berjalan.
Kamu akan membuat dua file untuk mengatur kodemu:
PhysicsConstants.cs: Definisikan classPhysicsConstantsdalam namespaceSimulation. Class ini harus berisi konstanta universal yang tidak pernah berubah dan nilainya sama di mana saja:- Field
constGravitydengan nilai9.81 - Field
constSpeedOfLightdengan nilai299792458 - String
constGravityUnitdengan nilai"m/s^2"
- Field
Projectile.cs: Definisikan classProjectiledalam namespaceSimulation. Setiap proyektil memiliki nilai yang harus ditetapkan sekali saat dibuat dan tidak pernah diubah setelahnya:- Field
readonlyName(string) - Field
readonlyInitialVelocity(double) - Field
readonlyLaunchAngle(double, dalam derajat) - Sebuah constructor yang menerima dan menetapkan ketiga nilai
- Sebuah method
GetMaxHeight()yang menghitung tinggi maksimum menggunakan rumus:(velocity^2 * sin^2(angle)) / (2 * gravity). GunakanMath.Sin()dan konversi derajat ke radian dengan mengalikannya denganMath.PI / 180
- Field
Program.cs: Di file utama, buat proyektil menggunakan nilai input dan tampilkan konstanta fisika beserta tinggi maksimum proyektil yang dihitung.
Kamu akan menerima tiga input:
- Nama proyektil
- Kecepatan awal (dalam m/s)
- Sudut peluncuran (dalam derajat)
Cetak output dalam format berikut:
Gravity: {Gravity} {GravityUnit}
Speed of Light: {SpeedOfLight} m/s
Projectile: {Name}
Initial Velocity: {InitialVelocity} m/s
Launch Angle: {LaunchAngle} degrees
Max Height: {maxHeight} mBulatkan tinggi maksimum menjadi 2 angka desimal menggunakan Math.Round(value, 2).
Misalnya, jika inputnya adalah Rocket, 50, dan 45, outputnya harus seperti berikut:
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 mCoba sendiri
using System;
using Simulation;
class Program
{
public static void Main(string[] args)
{
// Baca input
string name = Console.ReadLine();
double velocity = Convert.ToDouble(Console.ReadLine());
double angle = Convert.ToDouble(Console.ReadLine());
// TODO: Buat object Projectile dengan nilai input
// TODO: Cetak konstanta fisika (Gravity beserta satuannya, Speed of Light)
// TODO: Cetak informasi proyektil (Name, Initial Velocity, Launch Angle)
// TODO: Hitung dan cetak tinggi maksimum (dibulatkan hingga 2 angka di belakang koma)
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Arsitektur class
Data Instance vs StaticKata Kunci 'readonly' & 'const'Field PendukungRingkasan: Pengelola Rekening BankLatihan sendiri: Compiler C# online