Statik Sınıflar
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 13 / 70.
Bir sınıf yalnızca statik üyeler içerdiğinde ve ondan hiçbir zaman örnek oluşturmanız gerekmediğinde, tüm sınıfı static olarak bildirebilirsiniz. Bu, derleyiciye sınıfın örneğinin oluşturulamayacağını ve yalnızca statik üyeler içerebileceğini bildirir.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}Statik sınıfları, statik üyeleri kullandığınız gibi, doğrudan sınıf adı üzerinden çağırarak kullanırsınız:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;Statik sınıfların önemli kısıtlamaları vardır. new ile bir örnek oluşturamazsınız, örnek yapıcıları olamaz ve miras alınamazlar. Yalnızca statik alanlar, özellikler ve metotlar içerebilirler.
Kullanmakta olduğunuz Console ve Math sınıfları, statik sınıfların mükemmel örnekleridir. Nesne durumuna ihtiyaç duymadan yardımcı işlevsellik sağlarlar. Statik sınıflar, örneğe özgü herhangi bir veri gerektirmeyen ilgili yardımcı metotları veya sabitleri gruplandırmak için idealdir.
Görev
KolayHerhangi bir nesne durumu gerektirmeyen ilgili yardımcı yöntemleri gruplandırmak için statik bir sınıf kullanarak bir sıcaklık dönüştürme aracı oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
TemperatureConverter.cs:Utilitiesad alanı (namespace) içindeTemperatureConverteradında statik bir sınıf tanımlayın. Bu sınıf şunları içermelidir:-273.15değerine ayarlanmış statik bir alan:AbsoluteZeroCelsius- Şu formülü kullanarak Celsius'u Fahrenheit'a dönüştüren statik bir yöntem:
CelsiusToFahrenheit(double celsius). Formül:(celsius * 9 / 5) + 32 - Şu formülü kullanarak Fahrenheit'ı Celsius'a dönüştüren statik bir yöntem:
FahrenheitToCelsius(double fahrenheit). Formül:(fahrenheit - 32) * 5 / 9 - Sıcaklık mutlak sıfırın üzerindeyse
truedöndüren statik bir yöntem:IsAboveAbsoluteZero(double celsius)
Program.cs: Ana dosyanızda, dönüşümleri gerçekleştirmek için statik sınıfı kullanın. Girişten Celsius cinsinden bir sıcaklık değeri okuyun, ardından dönüşümleri ve doğrulamayı görüntüleyin.
Bir giriş alacaksınız: Celsius cinsinden bir sıcaklık değeri.
Sonuçları şu formatta yazdırın:
{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}CÖrneğin, giriş 25 ise, çıktı şöyle olmalıdır:
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15CStatik sınıfların örneğinin oluşturulamayacağını (instantiated) unutmayın; tüm yöntemleri doğrudan sınıf adı üzerinden TemperatureConverter.CelsiusToFahrenheit(25) şeklinde çağıracaksınız.
Kopya kağıdı
Bir static sınıf yalnızca statik üyeler içerebilir ve örneği oluşturulamaz (instantiated). Nesne durumu gerektirmeyen ilgili yardımcı metotları ve sabitleri gruplandırmak için kullanılır.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}Statik sınıf üyelerine doğrudan sınıf adı üzerinden erişilir:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;Statik sınıfların kısıtlamaları:
newanahtar kelimesi ile örneği oluşturulamaz- Örnek yapıcıları (instance constructors) olamaz
- Miras alınamaz
- Yalnızca statik alanlar, özellikler ve metotlar içerebilir
Yaygın örnekler arasında, nesne durumuna ihtiyaç duymadan yardımcı işlevsellik sağlayan Console ve Math sınıfları yer alır.
Kendin dene
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// Celsius cinsinden sıcaklığı oku
double celsius = Convert.ToDouble(Console.ReadLine());
// TODO: TemperatureConverter statik metotlarını kullanarak şunları yapın:
// 1. Celsius'u fahrenheit'a çevirin
// 2. Fahrenheit'ı tekrar celsius'a çevirin
// 3. Sıcaklığın mutlak sıfırın üzerinde olup olmadığını kontrol edin
// 4. Mutlak sıfır sabitini alın
// TODO: Sonuçları istenen formatta yazdırın:
// {celsius}C = {fahrenheit}F
// {fahrenheit}F = {convertedBack}C
// Above Absolute Zero: {True/False}
// Absolute Zero: {AbsoluteZeroCelsius}C
}
}
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
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları