Aracılığıyla paylaş


Yerleşik türler ve sabitler

Tip

Yazılım geliştirme konusunda yeni misiniz? İlk olarak Başlangıç öğreticileri ile başlayın. İlk programlarınızı yazarken türleri tanıtırlar.

Başka bir dilde mi deneyimlisiniz? C# yerleşik türleri Java, C++ ve diğer dillerdeki türlerle yakından eşlenir. C#'ye özgü ayrıntılar için literal sözdizimi ve tür çıkarımı bölümlerini gözden geçirin.

C# ek başvurular olmadan herhangi bir programda kullanabileceğiniz bir dizi yerleşik tür sağlar. Bu türler, üzerinde çalıştığınız en yaygın verileri kapsar: sayılar, doğru/yanlış değerler, tek tek karakterler ve metin. C# anahtar sözcüklerini .NET türlerine eşlemek için bkz. Yerleşik türler (C# başvurusu).

Sayısal türler

C# tamsayılar, kayan noktalı sayılar ve ondalık sayılar için yerleşik türler içerir. En yaygın kullanılan türler , intve double'tirdecimal:

int population = 67_000_000;
long distance = 384_400_000L;
short temperature = -40;
byte red = 255;

double pi = 3.141592653589793;
float gravity = 9.81f;
decimal price = 19.99m;

Her sayısal türün sabit bir boyutu ve aralığı vardır. int 32 bit tamsayıları (kabaca ±2,1 milyar) depolar, long 64 bit tamsayıları depolar ve shortbyte daha küçük değerleri depolar. Boyutların ve aralıkların tam listesi için bkz. Tam sayı türleri ve Kayan nokta sayısal türleri.

Genel kayan noktalı matematik işlemleri için, double bellek kısıtlandığında ve float tam ondalık duyarlık gerektiğinde (finansal hesaplamalar gibi) kullanındecimal. f değişmez değerler için float son eki ve m değişmez değerler için decimal son ekini ekleyin. Ek olmadan, derleyici ondalık nokta içeren bir sayıyı double olarak ele alır.

İmzasız türler

her imzalı tamsayı türünün yalnızca pozitif aralığın iki katı olan negatif olmayan değerleri depolayan imzasız bir karşılığı vardır:

uint fileSize = 4_294_967_295;
ulong totalBytes = 18_446_744_073_709_551_615;
ushort port = 443;

Dosya boyutları veya ağ bağlantı noktaları gibi veriler için negatif değerler geçerli olmadığında imzasız türler kullanabilirsiniz. Uygulamada, birçok uygulama, yalnızca pozitif değerler için bile int veya long kullanır çünkü .NET API'lerinde imzalı türler varsayılan olarak kullanılır.

Yerel boyutlu tamsayılar

nint ve nuint türleri, platformun yerel işaretçi boyutuna göre değişen tamsayıları temsil eder: 32 bitlik bir platformda 32 bit, 64 bitlik bir platformda 64 bit.

nint bufferSize = 1024;
nuint elementCount = 256;

Günlük kodda nint veya nuint'e ihtiyaç duymanız pek olası değildir. Bunlar, platformun işaretçi boyutuyla eşleşmenin önemli olduğu birlikte çalışma senaryoları ve düşük düzeyli bellek işlemleri için mevcuttur. int veya long ile devam edin, yerel boyutlu türleri kullanmak için belirli bir nedeniniz yoksa. Daha fazla bilgi için bkz. nint ve nuint.

bool, char ve string

C#, sayıların ötesinde üç sık kullanılan yerleşik tür daha sağlar:

bool isValid = true;
char grade = 'A';
string greeting = "Hello, world!";
  • bool — Stores true veya false. Koşullar, döngüler ve mantıksal ifadelerde kullanın.
  • char — Tek tırnak içine alınmış tek bir Unicode karakteri (UTF-16 kod birimi) depolar.
  • string — Çift tırnak içine alınmış bir karakter dizisi depolar. Dizeler sabittir. Bir dize oluşturduktan sonra içeriğini değiştiremezsiniz. Bir dizeyi değiştirmek için görünen işlemler aslında yeni bir dize oluşturur.

Dizeler, C# dilinde en çok kullanılan türlerden biridir. İlişkilendirme, ham dize değişmez değerleri, arama, bölme ve karşılaştırma gibi dize işlemlerinin ayrıntılı kapsamı için Dizeler bölümüne bakın.

Değişmez değer söz dizimi

Değişmez değer, doğrudan kodunuz içinde yazdığınız bir değerdir. Derleyici, her sabit değere, biçimine ve belirttiğiniz soneklerine göre bir tür atar. C# aşağıdaki değişmez değer türlerini destekler:

  • Sabit değerler — Ondalık (42), onaltılık (0x2A) ve ikili (0b_0010_1010).
  • Kayan nokta sabitleri — varsayılan olarak (), sonek kullanılarak () ve ile ().>
  • Karakter değişmezleri — Tek tırnak içinde tek bir karakter, kaçış dizileri ('A' dahil).
  • String literalları — Normal ("hello"), verbatim (@"C:\path"), ham (""" ... """) ve interpolasyonlu ($"value: {x}").
  • Boole değişmez değerleritrue ve false.
  • Literal null — Başvuru türleri ve null yapılabilir değer türleri için bir değerin yokluğunu temsil eder.
  • Sabit default — Herhangi bir tür için varsayılan değeri üretir (ifade kapsamında ele alınmıştırdefault).

Aşağıdaki bölümlerde en yaygın harfi formlar ayrıntılı olarak ele alınıyor.

Tamsayı değişmez değerleri

int dec = 42;
int hex = 0x2A;
int bin = 0b_0010_1010;
long big = 1_000_000_000L;

0x ön ekini onaltılık için ve 0b ikili için kullanın. L için long ekleyin, U için uint ekleyin veya UL için ulong ekleyin.

Basamak ayırıcı _'yı, okumayı kolaylaştırmak için bir sayı içinde herhangi bir yere yerleştirin. Yaygın desenler arasında ondalık sayılardaki binlik ayırıcılar (1_000_000_000), onaltılık sayılardaki bayt veya sözcük sınırları (0xFF_FF) ve ikili sayılardaki nibble sınırları (0b_0010_1010) bulunur.

Kayan nokta değişmez değerleri

double d = 3.14;
float f = 3.14f;
decimal m = 3.14m;
double scientific = 1.5e6; // 1,500,000

Sonek olmadan, ondalık noktası olan bir sayısal literal double olur. float için f ve decimal için m ekleyin. Bilimsel gösterim (1.5e6) de desteklenir.

Karakter ve dize değişmez değerleri

char newline = '\n';
char unicode = '\u0041'; // 'A'

string message = $"Found {dec} items";            // interpolated string
string path = @"C:\Users\docs\file.txt";        // verbatim string
string json = """
    { "name": "Alice", "age": 30 }
    """;                                           // raw string literal
string raw = $"""
    Found {dec} items in "{greeting}"
    """;                                           // raw + interpolated

Karakter sabitleri tek tırnak işaretleri kullanır ve kaçış dizilerini (\n, \t, \u) destekler. String sabitleri çift tırnak işareti kullanır.

"Yerleştirme için dizeleri $ ile ön ekleyin." Dize tırnak işaretleri, ters eğik çizgiler veya içinde gömülü JSON ya da XML içeriyorsa, her karakteri kaçırmak yerine """ ile sınırlandırılmış ham karakterlik dize kullanın. Ham dize değişmezleri ilişkilendirme ($""") ile de birleştirilir.

Eski kod, kaçış işlemesini önlemek için @ (harfiyen dizeler) kullanır. Ham dize değişmez değerlerinin okunması ve yazması daha kolaydır, bu nedenle bunları yeni kod için tercih edin.

default ifadeler

İfade, default bir tür için varsayılan değeri üretir: 0 sayısal türler için, false için boolve null başvuru türleri için:

int defaultInt = default;          // 0
bool defaultBool = default;        // false
string? defaultString = default;   // null

// Use default in a conditional:
var limit = (args.Length > 0) ? int.Parse(args[0]) : default(int);

Genel kodda, default ifadesi en çok yararlıdır çünkü somut türü bilmezsiniz ve 0 gibi belirli bir değeri null sabit kodlayamazsınız. default yazın (tür bağımsız değişkeni olmadan) eğer derleyici türü bağlamdan çıkarabiliyorsa veya tür belirgin değilse default(T) yazın. Türe göre varsayılan değerlerin tam listesi için bkz. C# türlerinin varsayılan değerleri.

var ile örtük biçimde tanımlanan değişkenler

var anahtar sözcüğü derleyiciye bir yerel değişkenin türünü başlatıcısından çıkarmasını söyler:

var count = 10;              // compiler infers int
var name = "C#";             // compiler infers string
var items = new List<int>(); // compiler infers List<int>

// var requires an initializer — the compiler needs a value to infer the type.
// The following line wouldn't compile:
// var unknown;

Değişken hala güçlü bir şekilde türlendirilmiştir; var onu dinamik hale getirmez. Derleyici, derleme zamanında türü belirler ve tür güvenliğini her zamanki gibi sağlar. Görsel gürültüyü azaltmak için türün sağ taraftan belirgin olduğu durumlarda kullanın var . Kodu daha net hale getirdiğinde türü açıkça belirtin. Daha fazla bilgi için bkz. Örtük olarak yazılan yerel değişkenler.

Hedef türündeki new ifadeler

Hedef türü bir değişken bildirimi veya yöntem parametresi gibi bağlamdan zaten biliyorsanız, ifadeden new tür adını atlayabilirsiniz:

List<string> names = new() { "Alice", "Bob", "Charlie" };
Dictionary<string, int> scores = new()
{
    ["Alice"] = 95,
    ["Bob"] = 87
};

Tür hedefli new, tür adı uzun olduğunda veya atamanın sol tarafında yer aldığında tekrarı azaltır. Derleyicinin yöntem bağımsız değişkenleri ve dönüş deyimleri dahil olmak üzere hedef türü belirleyebildiği her yerde çalışır. Daha fazla bilgi için new hedef türü operatörü —new bölümüne bakın.

Türü dynamic

Tür, dynamic derleme zamanı türü denetimini atlar. Derleyici bunun yerine bir dynamic değişken üzerindeki işlemleri çalışma zamanında çözer:

dynamic value = 42;
Console.WriteLine(value.GetType()); // System.Int32

value = "Now I'm a string";
Console.WriteLine(value.GetType()); // System.String

// The compiler doesn't check operations on dynamic at compile time.
// Errors surface at run time instead.

Derleme zamanında türlerin bilinmediği COM API'leri, dinamik diller veya yansıma ağırlıklı senaryolarla etkileşim kurarken kullanın dynamic . Çoğu uygulama kodunda derleme zamanı güvenliğini kaybettiğiniz için dynamic kullanmaktan kaçının. Derleyicinin normalde yakaladığı hatalar bunun yerine çalışma zamanı özel durumları haline gelir. Daha fazla bilgi için bkz . Dinamik tür.

Ayrıca bakınız