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.
Bu öğreticide, C# dilinde tür oluşturma hakkında bilgi edineceksiniz. Küçük miktarlarda kod yazar, sonra bu kodu derleyip çalıştırırsınız. Öğretici, C# dilindeki farklı türleri keşfeden bir dizi ders içerir. Bu dersler size C# dilinin temellerini öğretir.
İpucu
Kod parçacığı bloğu "Çalıştır" düğmesini içerdiğinde, bu düğme etkileşimli pencereyi açar veya etkileşimli penceredeki mevcut kodun yerini alır. Kod parçacığında "Çalıştır" düğmesi olmadığında kodu kopyalayıp geçerli etkileşimli pencereye ekleyebilirsiniz.
Önceki öğreticiler metin ve sayılarla çalıştı. Dizeler ve Sayılar basit türlerdir: Her biri tek bir değer depolar. Programlarınız büyüdükçe daha gelişmiş veri yapılarıyla çalışmanız gerekir. C# daha fazla alan, özellik veya davranışa sahip veri yapılarına ihtiyacınız olduğunda tanımlayabileceğiniz farklı tür türleri sağlar. Şimdi bu türleri keşfetmeye başlayalım.
Demetler
Tuple'lar sabit uzunlukta, sıralı bir değer dizisidir. Bir tuple'ın her öğesi bir türe ve isteğe bağlı bir ada sahiptir. Aşağıdaki kod, iki boyutlu bir noktayı temsil eden bir demet bildirir. Aşağıdaki kodu etkileşimli pencereye yapıştırmak ve çalıştırmak için "Çalıştır" düğmesini seçin.
var pt = (X: 1, Y: 2);
var slope = (double)pt.Y / (double)pt.X;
Console.WriteLine($"A line from the origin to the point {pt} has a slope of {slope}.");
İpucu
C# dilini (veya herhangi bir programlama dilini) keşfederken, kod yazarken hatalar yaparsınız. Derleyici bu hataları bulur ve size bildirir. Çıktı hata iletileri içerdiğinde, nelerin düzeltileceğini görmek için örnek koda ve etkileşimli penceredeki koda yakından bakın. Bu alıştırma, C# kodunun yapısını öğrenmenize yardımcı olur.
Bir demetin herhangi bir üyesini yeniden atayabilirsiniz. Var olan kodun ardından etkileşimli pencereye aşağıdaki kodu ekleyin. Sonuçları görmek için "Çalıştır" tuşuna yeniden basın.
pt.X = pt.X + 5;
Console.WriteLine($"The point is now at {pt}.");
Ayrıca, bir ifade kullanarak özgün kopyanın değiştirilmiş bir kopyası olan yeni bir with tanımlama grubu da oluşturabilirsiniz. Etkileşimli pencerede bulunan koddan sonra aşağıdaki kodu ekleyin ve sonuçları görmek için "Çalıştır" tuşuna basın:
var pt2 = pt with { Y = 10 };
Console.WriteLine($"The point 'pt2' is at {pt2}.");
Tanımlama grubu pt2, pt (6) değerini ve X içerir, ve pt2.Y 10'dur.
Demetler yapısal türlerdir. Başka bir deyişle, demet türlerinin string veya int gibi adları yoktur. Demet türü, arity olarak adlandırılan üye sayısı ve bu üyelerin türleriyle tanımlanır. Üye adları kolaylık sağlamak içindir. Üyelerin adları farklı olsa bile, aynı değere ve türlere sahip bir tanımlama grubu atayabilirsiniz. Etkileşimli pencerede önceden yazdığınız kodun arkasına aşağıdaki kodu ekleyebilir ve deneyebilirsiniz:
var subscript = (A: 0, B: 0);
subscript = pt;
Console.WriteLine(subscript);
Değişkenin subscript iki üyesi vardır ve her ikisi de tamsayıdır.
pt Hem hem de subscript aynı tanımlama grubu türünün örneklerini temsil eder: 2 int üye içeren bir tanımlama grubu.
Demetler oluşturmak kolaydır: Parantez içine alınmış birden çok üye tanımlarsınız. Aşağıdakilerin tümü farklı arities ve üye türlerinin farklı demetlerini bildirir. Yeni tanımlama grubu türleri oluşturmak için aşağıdaki kodu ekleyin:
var namedData = (Name: "Morning observation", Temp: 17, Wind: 4);
var person = (FirstName: "", LastName: "");
var order = (Product: "guitar picks", style: "triangle", quantity: 500, UnitPrice: 0.10m);
Tanımlama kümeleri kolayca oluşturulabilir, ancak özellikleri sınırlıdır. Tuple türlerinin isimleri yoktur, bu yüzden değer kümesine anlam yükleyemezsiniz. Demet türleri davranış ekleyemez. C# türü, türünüz davranışı tanımlarken oluşturabileceğiniz başka tür türlerine sahiptir.
Kayıt türleri oluşturma
Tüpler, aynı yapı içinde birden çok değer istediğiniz zamanlar için mükemmeldir. Bunlar hafiftir ve kullanıldıkları şekilde bildirilebilir. Programınız devam ettikçe, kodunuzun tamamında aynı tanımlama grubu türünü kullandığınızı fark edebilirsiniz. Uygulamanız 2B grafik alanında çalışıyorsa, noktaları temsil eden tanımlama grupları yaygın olabilir. Bunu bulduğunuzda, bu değerleri depolayan ve daha fazla özellik sağlayan bir record tür bildirebilirsiniz. Aşağıdaki kod örneği, programın giriş noktasını göstermek için bir Main yöntem kullanır. Bu şekilde, koddaki giriş noktasından önce bir record tür bildirebilirsiniz. Mevcut örneğinizi aşağıdaki kodla değiştirmek için aşağıdaki koddaki "Çalıştır" düğmesine basın.
Uyarı
Kopyalayıp yapıştırmayın. Aşağıdaki örneği çalıştırmak için etkileşimli pencerenin sıfırlanması gerekir. Hata yaparsanız pencere kilitlenir ve devam etmek için sayfayı yenilemeniz gerekir.
Aşağıdaki kod, bir öğesini temsil Pointetmek için bir record tür bildirir ve kullanır ve ardından yönteminde bu Point yapıyı Main kullanır:
public record Point(int X, int Y);
public static void Main()
{
Point pt = new Point(1, 1);
var pt2 = pt with { Y = 10 };
Console.WriteLine($"The two points are {pt} and {pt2}");
}
"record bildirimi, değerleri X ve Y salt okunur özelliklerde saklayan Point türü için tek satırlık bir koddur." Bu türü kullandığınız her yerde adı Point kullanırsınız. gibi Pointdüzgün adlandırılmış türler, türün nasıl kullanıldığı hakkında bilgi sağlar.
Main yöntemi, with ifadesinin, var olan bir noktanın değiştirilmiş bir kopyası olan yeni bir nokta oluşturmak için nasıl kullanılacağını gösterir. Satırda pt2 = pt with { Y = 10 }, "pt2, pt ile aynı değerlere sahiptir, ancak Y'e 10 atanmıştır." Tek bir with ifadesinde değiştirmek için istediğiniz sayıda özellik ekleyebilirsiniz.
Yukarıdaki record bildirim, tüm C# deyimleri gibi ile ;biten tek bir kod satırıdır.
Üyeleri bildirerek bir record türe davranış ekleyebilirsiniz. Kayıt üyesi bir işlev veya daha fazla veri öğesi olabilir. Bir türün üyeleri, tür bildiriminde { ve } karakterleri arasındadır. Yaptığınız kayıt bildirimini aşağıdaki kodla değiştirin:
public record Point(int X, int Y)
{
public double Slope() => (double)Y / (double)X;
}
Ardından, with ifadesini içeren satırdan sonra, aşağıdaki kodu Main yöntemine ekleyin:
double slope = pt.Slope();
Console.WriteLine($"The slope of {pt} is {slope}");
Bir X ve Y değerini temsil eden demete resmiyet eklediniz. Bunu adlandırılmış bir türü tanımlayan bir hale getirdiniz record ve eğimi hesaplamak için bir üye dahil ettiniz. Tür record, bir record class için kısaltmadır: class, ek davranış içeren bir türdür.
Point türünü record struct yapmak için değiştirebilirsiniz.
public record struct Point(int X, int Y)
{
public double Slope() => (double) Y / (double) X;
}
Arecord struct, tüm record türlere eklenen ek davranışı içeren bir struct türdür.
Yapı, sınıf ve arabirim türleri
C# dilindeki tüm adlandırılmış türler ya class ya da struct türleridir. A class bir başvuru türüdür. A struct bir değer türüdür. Değer türünün değişkenleri, örneğin içeriğini satır içi olarak bellekte depolar. Başka bir deyişle, bir record struct Point iki tamsayı depolar: X ve Y. Başvuru türünün değişkenleri, örneğin depolama alanına yönelik bir başvuruyu veya işaretçiyi depolar. Başka bir deyişle, record class Point, X ve Y değerlerini tutan bir bellek bloğuna başvuran bir referans depolar.
Pratikte, bu değer türlerinin atandığında kopyalanması anlamına gelir, ancak bir sınıf örneğinin kopyası başvurunun bir kopyasıdır. Kopyalanan başvuru, X ve Y için aynı depolama alanını paylaşan bir noktanın aynı örneğine başvurur.
Değiştirici, record derleyiciye sizin için birkaç üye yazmasını bildirir. Temel bilgiler bölümünde kayıt türleriyle ilgili makalede daha fazla bilgi edinebilirsiniz.
Bir record tür bildirdiğinizde, türünüzün eşitlik karşılaştırmaları, atama ve bu türe ait örnekleri kopyalama için varsayılan bir davranış kümesi kullanması gerektiğini bildirirsiniz. İlgili verileri depolamak, türünüzün birincil amacı olduğunda kayıtlar en iyi seçenektir. Daha fazla davranış ekledikçe record değiştirici olmadan struct veya class türlerini kullanmayı göz önünde bulundurun.
Daha karmaşık davranış gerektiğinde, ancak birincil sorumluluk değerleri depolamak olduğunda, değer türleri için struct türlerini kullanırsınız. Kapsülleme, devralma ve polimorfizm gibi nesne odaklı deyimleri kullanmak için türleri kullanırsınız class .
Ayrıca, farklı türlerin uygulaması gereken davranışsal sözleşmeleri bildirmek için türler tanımlayabilirsiniz interface . Hem struct hem de class türleri arabirimler uygulayabilir.
Bu türlerin tümünü genellikle daha büyük programlarda ve kitaplıklarda kullanırsınız. .NET SDK'sını yükledikten sonra temel bilgiler bölümündeki sınıflarla ilgili öğreticileri kullanarak bu türleri keşfedebilirsiniz.
"C#'ta türler oluşturma" etkileşimli öğreticisini tamamladınız. Sonraki etkileşimli öğreticiyi başlatmak için Dallar ve Döngüler bağlantısını seçebilir veya .NET SDK'sını indirmek, makinenizde bir proje oluşturmak ve kodlamaya devam etmek için .NET sitesi ziyaret edebilirsiniz. "Sonraki adımlar" bölümü sizi bu öğreticilere geri getirir.
C# dilindeki türler hakkında daha fazla bilgiyi aşağıdaki makalelerde bulabilirsiniz: