Data Instance vs Static
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 15 dari 70.
Sekarang setelah kamu memahami member static, mari kita perjelas kapan harus menggunakan data instance dan kapan menggunakan data static. Keputusan ini menentukan cara class-mu menyimpan dan berbagi informasi.
Data instance dimiliki oleh setiap object secara individual. Setiap object memiliki salinannya sendiri, dan perubahan pada satu object tidak memengaruhi object lainnya:
public class BankAccount
{
public string Owner { get; set; } // Instance: unik untuk setiap akun
public decimal Balance { get; set; } // Instance: unik untuk setiap akun
}Setiap BankAccount memiliki pemilik dan saldo sendiri. Itu masuk akal karena akun yang berbeda menyimpan jumlah uang yang berbeda untuk orang yang berbeda.
Data statis dimiliki oleh class itu sendiri dan digunakan bersama oleh semua instance:
public class BankAccount
{
public static decimal InterestRate = 0.05m; // Statis, sama untuk semua akun
public static int TotalAccounts = 0; // Statis, melacak semua akun
public string Owner { get; set; }
public decimal Balance { get; set; }
}Suku bunga berlaku sama untuk setiap akun, jadi tepat jika dijadikan static. Penghitung total akun melacak informasi untuk seluruh class, bukan data akun individual.
Aturan sederhana: jika data menjelaskan object tertentu, jadikan sebagai instance. Jika data menjelaskan class secara keseluruhan atau seharusnya digunakan bersama, jadikan static. Jika penggunaannya tercampur secara keliru, bug dapat muncul sehingga data berubah secara tak terduga antar-object atau tidak dapat diakses saat diperlukan.
Tantangan
MudahMari kita buat pelacak sesi game yang menunjukkan perbedaan antara data milik masing-masing pemain dan data yang digunakan bersama oleh seluruh game.
Kamu akan membuat dua file untuk mengatur kodemu:
Player.cs: Definisikan classPlayerdi namespaceGameSession. Setiap pemain memilikiUsername(string) danScore(int) sendiri, yang berbeda untuk setiap pemain. Class ini juga harus melacak informasi yang berlaku untuk semua pemain: field statisGameName(string) yang menyimpan nama game yang dimainkan semua orang, dan field statisTotalPlayers(int) yang menghitung jumlah pemain yang telah bergabung. Sertakan constructor yang menerima username dan skor awal, lalu otomatis menambah jumlah total pemain. Tambahkan method statisSetGameName(string name)untuk mengatur nama game.Program.cs: Di file utama, siapkan game dan buat pemain berdasarkan input. Pertama, atur nama game, lalu buat dua pemain dan tampilkan informasi masing-masing beserta data game yang digunakan bersama.
Kamu akan menerima lima input:
- Nama game
- Username pemain pertama
- Skor awal pemain pertama
- Username pemain kedua
- Skor awal pemain kedua
Cetak output dengan format berikut:
Game: {GameName}
Player: {Username}, Score: {Score}
Player: {Username}, Score: {Score}
Total Players: {TotalPlayers}Contohnya, jika inputnya adalah BattleArena, DragonSlayer, 1500, ShadowNinja, dan 2200, outputnya harus seperti ini:
Game: BattleArena
Player: DragonSlayer, Score: 1500
Player: ShadowNinja, Score: 2200
Total Players: 2Pikirkan baik-baik data mana yang harus berbasis instance (berbeda untuk setiap pemain) dan mana yang harus statis (digunakan bersama oleh semua pemain). Nama game dan jumlah total pemain menggambarkan sesi secara keseluruhan, sedangkan username dan skor unik untuk setiap pemain.
Coba sendiri
using System;
namespace GameSession
{
class Program
{
public static void Main(string[] args)
{
// Baca input
string gameName = Console.ReadLine();
string username1 = Console.ReadLine();
int score1 = Convert.ToInt32(Console.ReadLine());
string username2 = Console.ReadLine();
int score2 = Convert.ToInt32(Console.ReadLine());
// TODO: Atur nama game menggunakan method statis
// TODO: Buat dua object Player dengan data input
// TODO: Cetak output dalam format yang diminta
// Game: {GameName}
// Player: {Username}, Score: {Score}
// Player: {Username}, Score: {Score}
// Total Players: {TotalPlayers}
}
}
}
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