Jawaban:
Dalam C#
Anda tidak dapat mendefinisikan variabel global yang sebenarnya (dalam arti bahwa mereka tidak termasuk dalam kelas apa pun).
Karena itu, pendekatan paling sederhana yang saya tahu untuk meniru fitur ini terdiri dari penggunaan a static class
, sebagai berikut:
public static class Globals
{
public const Int32 BUFFER_SIZE = 512; // Unmodifiable
public static String FILE_NAME = "Output.txt"; // Modifiable
public static readonly String CODE_PREFIX = "US-"; // Unmodifiable
}
Anda kemudian dapat mengambil nilai yang ditentukan di mana saja di kode Anda (asalkan itu bagian dari yang sama namespace
):
String code = Globals.CODE_PREFIX + value.ToString();
Untuk menangani ruang nama yang berbeda, Anda dapat:
Globals
kelas tanpa menyertakannya ke dalam suatu spesifik namespace
(sehingga itu akan ditempatkan di namespace aplikasi global);namespace
.Tidak ada variabel global di C #. Titik.
Anda dapat memiliki anggota statis jika Anda ingin:
public static class MyStaticValues
{
public static bool MyStaticBool {get;set;}
}
static
contoh yang Anda berikan tidak dapat benar-benar dianggap sebagai variabel global.
Pertama, periksa apakah Anda benar-benar membutuhkan variabel global daripada menggunakannya secara terang-terangan tanpa mempertimbangkan arsitektur perangkat lunak Anda.
Mari kita asumsikan lulus ujian. Bergantung pada penggunaan, Globals mungkin sulit untuk di-debug dengan kondisi balapan dan banyak "hal buruk" lainnya, yang terbaik adalah mendekatinya dari sudut di mana Anda siap untuk menangani hal-hal buruk seperti itu. Begitu,
static
kelas (untuk pengelolaan).Garis besar dasar untuk kelas seperti itu adalah:
public class Globals
{
private static bool _expired;
public static bool Expired
{
get
{
// Reads are usually simple
return _expired;
}
set
{
// You can add logic here for race conditions,
// or other measurements
_expired = value;
}
}
// Perhaps extend this to have Read-Modify-Write static methods
// for data integrity during concurrency? Situational.
}
Penggunaan dari kelas lain (dalam namespace yang sama)
// Read
bool areWeAlive = Globals.Expired;
// Write
// past deadline
Globals.Expired = true;
Fitur yang berguna untuk ini adalah using static
Seperti yang dikatakan orang lain, Anda harus membuat kelas untuk global Anda:
public static class Globals {
public const float PI = 3.14;
}
Tetapi Anda dapat mengimpornya seperti ini agar tidak lagi menulis nama kelas di depan properti statisnya:
using static Globals;
[...]
Console.WriteLine("Pi is " + PI);