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.
Tip
Yazılım geliştirme konusunda yeni misiniz? İlk olarak Başlangıç öğreticileri ile başlayın. Size program yazmayı adım adım öğretip ilerledikçe türleri tanıtırlar.
Başka bir dilde mi deneyimlisiniz? Tür sistemlerini zaten anlıyorsanız, değer ve başvuru ayrımını gözden geçirin ve hangi türü seçeceğinizi anlatan kılavuza bakın, ardından belirli türlerle ilgili makalelere geçiş yapın.
C# kesin olarak yazılan bir dildir. Her değişken, sabit ve ifadenin bir türü vardır. Derleyici, kodunuzdaki her işlemin ilgili türler için geçerli olup olmadığını denetleyerek tür güvenliğini zorlar. Örneğin, iki int değer ekleyebilirsiniz, ancak bir int ve bool değer ekleyemezsiniz.
int a = 5;
int b = a + 2; // OK
bool test = true;
// Error. Operator '+' cannot be applied to operands of type 'int' and 'bool'.
// int c = a + test;
Uyarı
C ve C++'ın aksine, C# dilinde bool, int'ye dönüştürülemez.
Tür güvenliği, kodunuz çalışmadan önce derleme zamanında hataları yakalar. Derleyici ayrıca tür bilgilerini yürütülebilir dosyaya meta veri olarak ekler ve ortak dil çalışma zamanı (CLR), çalışma zamanında ilave güvenlik denetimlerini gerçekleştirmek için bunları kullanır.
Türleri olan değişkenleri bildirme
Bir değişkeni bildirdiğinizde, türünü açıkça belirtirsiniz veya derleyicinin türü atanan değerden çıkarmasına izin vermek için kullanırsınız var :
// Explicit type:
int count = 10;
double temperature = 36.6;
// Compiler-inferred type:
var name = "C#";
var items = new List<string> { "one", "two", "three" };
Yöntem parametrelerinin ve dönüş değerlerinin de türleri vardır. Aşağıdaki yöntem bir string ve intalır ve döndürür string:
static string GetGreeting(string name, int visitCount)
{
return visitCount switch
{
1 => $"Welcome, {name}!",
_ => $"Welcome back, {name}! Visit #{visitCount}."
};
}
Bir değişkeni bildirdikten sonra türünü değiştiremez veya bildirilen türle uyumsuz bir değer atayamazsınız. Değerleri diğer türlere dönüştürebilirsiniz. Derleyici, verileri otomatik olarak kaybetmeyen örtük dönüştürmeler gerçekleştirir. Açık dönüştürmeler (atamalar), kodunuzda dönüştürmeyi belirtmenizi gerektirir. Daha fazla bilgi için Dönüştürme ve tür dönüştürmeleri bölümüne bakın.
Yerleşik türler ve özel türler
C# ortak veriler için yerleşik türler sağlar: tamsayılar, kayan noktalı sayılar, bool, charve string. Her C# programı, ek başvuru olmadan bu yerleşik türleri kullanabilir.
Yerleşik türlerin ötesinde, birkaç yapı kullanarak kendi türlerinizi oluşturabilirsiniz:
- Sınıflar — Davranış modelleme ve karmaşık nesneler için başvuru türleri. Devralmayı ve çok biçimliliği destekler.
- Yapılar — Küçük, basit veriler için değer türleri. Her değişken kendi kopyasını tutar.
-
Kayıtlar — Derleyici tarafından oluşturulan eşitlik,
ToStringve ifadeler aracılığıylawithyıkıcı olmayan mutasyona sahip sınıflar veya yapılar. - Arabirimler — Herhangi bir sınıfın veya yapının uygulayabileceği üyeleri tanımlayan sözleşmeler.
- Numaralandırmalar — Haftanın günleri veya dosya erişim modları gibi integral sabitlerinin adlandırılmış kümeleri.
- Demetler — Adlandırılmış bir tür tanımlamadan ilgili değerleri gruplandıran basit yapısal türler.
-
Genel türler — ve gibi
List<T>Dictionary<TKey, TValue>tür parametreli yapılar, farklı türler için aynı mantığı yeniden kullanırken tür güvenliği sağlar.
Değer türleri ve başvuru türleri
C# dilindeki her tür bir değer türü veya başvuru türüdür. Bu ayrım, değişkenlerin verileri nasıl depoladığını ve atamanın nasıl çalıştığını belirler.
Değer türleri verilerini doğrudan tutar. Yeni bir değişkene değer türü atadığınızda çalışma zamanı verileri kopyalar. Bir değişkende yapılan değişiklikler diğerini etkilemez. Yapılar, sabit listeleri ve yerleşik sayısal türlerin tümü değer türleridir.
Başvuru türleri , yönetilen yığındaki bir nesneye başvuru içerir. Yeni bir değişkene bir başvuru türü atadığınızda, her iki değişken de aynı nesneye işaret eder. Bir değişkendeki değişiklikler diğer değişkenden görülebilir. Sınıflar, diziler, temsilciler ve dizeler başvuru türleridir.
Aşağıdaki örnekte fark gösterilmektedir. İlk blok, bir değer türü olan kayıt yapısının Coords tanımını gösterir. İkinci blok, değer türleri ve başvuru türleri için farklı davranışı gösterir.
public readonly record struct Coords(int X, int Y);
// Value type: each variable holds its own copy
var point1 = new Coords(3, 4);
var point2 = point1;
Console.WriteLine($"point1: ({point1.X}, {point1.Y})");
Console.WriteLine($"point2: ({point2.X}, {point2.Y})");
// point1 and point2 are independent copies
// Reference type: both variables refer to the same object
var list1 = new List<int> { 1, 2, 3 };
var list2 = list1;
list2.Add(4);
Console.WriteLine($"list1 count: {list1.Count}"); // 4 — same object
Tüm türler sonunda System.Object'den türetilir. Değer türleri System.ValueType'den türetilir, bu da object'den türetilmiştir. Bu birleşik hiyerarşi Ortak Tür Sistemi (CTS) olarak adlandırılır. Devralma hakkında daha fazla bilgi için bkz . Devralma.
Hangi türü seçmek istediğinizi belirleyin
Yeni bir tür tanımladığınızda, seçtiğiniz tür kodunuzun nasıl davranacağını şekillendirir. İlk kararı vermek için aşağıdaki yönergeleri kullanın:
- Tuple — Adlandırılmış tür veya davranış gerektirmeyen, değerlerin geçici olarak gruplandırılması.
-
structveyarecord struct— Küçük veriler (kabaca 64 bayt veya daha az), değer semantiği veya değişmezlik. Kayıt yapıları değer tabanlı eşitlik vewithifadeler ekler. -
record class— Temelde veri, değere dayalı eşitlikToStringve yıkıcı olmayan mutasyon ile. Devralmayı destekler. -
class— Karmaşık davranış, polimorfizm veya değiştirilebilir durum. Çoğu özel tür sınıflardır. -
interface— İlişkili olmayan türlerin uygulayabileceği bir sözleşme. Kimlik yerine özellikleri tanımlar. -
enum— Durum kodları veya seçenekler gibi sabit bir adlandırılmış sabit kümesi.
Birden fazla seçenek genellikle makuldür.
Derleme zamanı türü ve çalışma zamanı türü
Bir değişkenin derleme zamanında ve çalışma zamanında farklı türleri olabilir. Derleme zamanı türü, kaynak kodunda bildirilen veya çıkarım yapılan türdür. Çalışma zamanı türü, değişkenin başvurduğu örneğin gerçek türüdür. Çalışma zamanı türü, derleme zamanı türüyle veya ondan türetilen veya bunu uygulayan bir türle aynı olmalıdır. Atama yalnızca kimlik, başvuru, kutulama veya sayısal dönüştürme gibi çalışma zamanı türünden derleme zamanı türüne örtük bir dönüştürme mevcut olduğunda geçerlidir.
// Compile-time and run-time types match:
string message = "Hello, world!";
// Compile-time type differs from run-time type:
object boxed = "This is a string at run time";
IEnumerable<char> characters = "abcdefghijklmnopqrstuvwxyz";
Yukarıdaki örnekte, boxed derleme zamanı türüne object , ancak çalışma zamanı türüne stringsahiptir. Görev, object'den türetildiği için string çalışır. Benzer şekilde, characters derleme zamanı türüne IEnumerable<char>sahiptir ve bu arabirimi uyguladığından string atama çalışır. Derleme zamanı türü aşırı yükleme çözümlemesini ve kullanılabilir dönüştürmeleri denetler. Çalışma zamanı türü sanal yöntem gönderimini, is ifadelerini ve switch ifadelerini denetler.
Ayrıca bakınız
C# dil belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# söz dizimi ve kullanımı için kesin kaynaktır.