Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
statik sınıfı temelde statik olmayan bir sınıfla aynıdır, ancak bir fark vardır: statik sınıf örneği oluşturulamaz. Başka bir deyişle, sınıf türünde bir değişken oluşturmak için yeni işlecini kullanamazsınız. Örnek değişkeni olmadığından, sınıf adının kendisini kullanarak statik sınıfın üyelerine erişirsiniz. Örneğin, UtilityClass
adlı genel statik yöntemi olan MethodA
adlı bir statik sınıfınız varsa, aşağıdaki örnekte gösterildiği gibi yöntemini çağırırsınız:
UtilityClass.MethodA();
Statik sınıf, yalnızca giriş parametreleri üzerinde çalışan ve iç örnek alanlarını almak veya ayarlamak zorunda olmayan yöntem kümeleri için kullanışlı bir kapsayıcı olarak kullanılabilir. Örneğin, .NET Sınıf Kitaplığı'nda statik System.Math sınıfı, Math sınıfının belirli bir örneğine özgü verileri depolamaya veya almaya gerek kalmadan matematiksel işlemler gerçekleştiren yöntemler içerir. Yani, aşağıdaki örnekte gösterildiği gibi sınıf adını ve yöntem adını belirterek sınıfın üyelerini uygularsınız.
double dub = -3.14;
Console.WriteLine(Math.Abs(dub));
Console.WriteLine(Math.Floor(dub));
Console.WriteLine(Math.Round(Math.Abs(dub)));
// Output:
// 3.14
// -4
// 3
Tüm sınıf türlerinde olduğu gibi, sınıfa başvuran program yüklendiğinde .NET çalışma zamanı statik sınıfın tür bilgilerini yükler. Program, sınıfın tam olarak ne zaman yükleneceğini belirtemez. Ancak, programınızda sınıf ilk defa kullanılmadan önce yüklenip, alanlarının başlatılması ve statik yapıcısının çağrılmış olması garanti edilir. Statik oluşturucu yalnızca bir kez çağrılır ve statik sınıf, programınızın bulunduğu uygulama etki alanının ömrü boyunca bellekte kalır.
Uyarı
Statik olmayan ve yalnızca bir örneğinin oluşturulmasına izin veren bir sınıf oluşturmak için bkz. C#'ta Singleton Deseni.
Aşağıdaki liste statik sınıfın ana özelliklerini sağlar:
Yalnızca statik üyeleri içerir.
Örnek oluşturulamaz.
Mühürlendi.
Örnek Oluşturuculariçeremez.
Bu nedenle statik sınıf oluşturmak temelde yalnızca statik üyeler ve özel bir oluşturucu içeren bir sınıf oluşturmakla aynıdır. Özel bir kurucu, sınıfın örneklenmesini engeller. Statik sınıf kullanmanın avantajı, derleyicinin hiçbir örnek üyesinin yanlışlıkla eklenmediğinden emin olmak için denetleyebiliyor olmasıdır. Derleyici, bu sınıfın örneklerinin oluşturulamayacağını garanti eder.
Statik sınıflar mühürlüdür ve bu nedenle devralınamaz. Objectdışında herhangi bir sınıftan veya arabirimden devralamaz. Statik sınıflar örnek oluşturucu içeremez. Ancak, statik bir oluşturucu içerebilirler. Sınıf, önemsiz olmayan başlatma gerektiren statik üyeler içeriyorsa, statik olmayan sınıflar da statik bir oluşturucu tanımlamalıdır. Daha fazla bilgi için bkz. Statik Oluşturucular.
Örnek
Santigrat'tan Fahrenheit'e ve Fahrenheit'ten Santigrat'a sıcaklığı dönüştüren iki yöntem içeren bir statik sınıf örneği aşağıda verilmiştir:
public static class TemperatureConverter
{
public static double CelsiusToFahrenheit(string temperatureCelsius)
{
// Convert argument to double for calculations.
double celsius = Double.Parse(temperatureCelsius);
// Convert Celsius to Fahrenheit.
double fahrenheit = (celsius * 9 / 5) + 32;
return fahrenheit;
}
public static double FahrenheitToCelsius(string temperatureFahrenheit)
{
// Convert argument to double for calculations.
double fahrenheit = Double.Parse(temperatureFahrenheit);
// Convert Fahrenheit to Celsius.
double celsius = (fahrenheit - 32) * 5 / 9;
return celsius;
}
}
class TestTemperatureConverter
{
static void Main()
{
Console.WriteLine("Please select the convertor direction");
Console.WriteLine("1. From Celsius to Fahrenheit.");
Console.WriteLine("2. From Fahrenheit to Celsius.");
Console.Write(":");
string? selection = Console.ReadLine();
double F, C = 0;
switch (selection)
{
case "1":
Console.Write("Please enter the Celsius temperature: ");
F = TemperatureConverter.CelsiusToFahrenheit(Console.ReadLine() ?? "0");
Console.WriteLine($"Temperature in Fahrenheit: {F:F2}");
break;
case "2":
Console.Write("Please enter the Fahrenheit temperature: ");
C = TemperatureConverter.FahrenheitToCelsius(Console.ReadLine() ?? "0");
Console.WriteLine($"Temperature in Celsius: {C:F2}");
break;
default:
Console.WriteLine("Please select a convertor.");
break;
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Example Output:
Please select the convertor direction
1. From Celsius to Fahrenheit.
2. From Fahrenheit to Celsius.
:2
Please enter the Fahrenheit temperature: 20
Temperature in Celsius: -6.67
Press any key to exit.
*/
Statik Üyeler
Statik olmayan bir sınıf statik yöntemler, alanlar, özellikler veya olaylar içerebilir. Statik üye, sınıfın hiçbir örneği mevcut olmasa bile bir sınıfta çağrılabilir. Statik üyeye her zaman örnek adıyla değil sınıf adıyla erişilir. Sınıfın kaç örneğinin oluşturulduğundan bağımsız olarak, statik üyenin yalnızca bir kopyası vardır. Statik yöntemler ve özellikler, içerdiği türdeki statik olmayan alanlara ve olaylara erişemez ve bir yöntem parametresinde açıkça geçirilmediği sürece herhangi bir nesnenin örnek değişkenine erişemez.
Statik olmayan bir sınıfı bazı statik üyeler ile bildirmek, sınıfın tamamını statik olarak bildirmekten daha tipiktir. Statik alanların iki yaygın kullanım alanı, örnek olarak kullanılan nesne sayısını tutmak veya tüm örnekler arasında paylaşılması gereken bir değeri depolamaktır.
Statik yöntemler, sınıfın herhangi bir örneğine değil sınıfına ait olduğundan aşırı yüklenebilir ancak geçersiz kılınamaz.
Bir alan static const
olarak bildirilemiyor olsa da, const alanı temelde davranışında statiktir. Türün örneklerinden ziyade türe aittir. Bu nedenle, statik alanlar için kullanılan const
gösterimi kullanılarak ClassName.MemberName
alanlara erişilebilir. Nesne örneği gerekmez.
C# statik yerel değişkenleri (yöntem kapsamında bildirilen değişkenler) desteklemez.
Aşağıdaki örnekte gösterildiği gibi, üyenin dönüş türünden önce static
anahtar sözcüğünü kullanarak statik sınıf üyelerini bildirirsiniz:
public class Automobile
{
public static int NumberOfWheels = 4;
public static int SizeOfGasTank
{
get
{
return 15;
}
}
public static void Drive() { }
public static event EventType? RunOutOfGas;
// Other non-static fields and properties...
}
Statik üyeler, statik üyeye ilk kez erişilmeden önce ve varsa statik oluşturucu çağrılmadan önce başlatılır. Statik sınıf üyesine erişmek için, aşağıdaki örnekte gösterildiği gibi üyenin konumunu belirtmek için değişken adı yerine sınıfın adını kullanın:
Automobile.Drive();
int i = Automobile.NumberOfWheels;
Sınıfınız statik alanlar içeriyorsa, sınıf yüklendiğinde bunları başlatan bir statik oluşturucu sağlayın.
Statik bir yönteme yapılan çağrı ortak ara dilde (CIL) bir çağrı yönergesi oluştururken, örnek yöntemine yapılan bir çağrı, null nesne başvurularını da denetleyen bir callvirt
yönergesi oluşturur. Ancak çoğu zaman ikisi arasındaki performans farkı önemli değildir.
C# Dil Belirtimi
Daha fazla bilgi için, Statik sınıflar, Statik ve örnek üyeler ve Statik oluşturucular bölümlerine, C# Dil Belirtimiiçinde bakın. Dil belirtimi, C# söz dizimi ve kullanımı için kesin kaynaktır.