C# dili turu
C# ("See Sharp" olarak okunur), modern, nesne odaklı ve türe uygun bir programlama dilidir. C#, geliştiricilerin .NET'te çalıştıran birçok tür güvenli ve sağlam uygulama oluşturmalarına olanak sağlar. C# dilinin kökleri C dil ailesindedir ve C, C++, Java ve JavaScript programcılarına hemen tanıdık gelecektir. Bu tur, C# 8 ve önceki sürümlerde dilin ana bileşenlerine genel bir bakış sağlar. Dili etkileşimli örneklerle keşfetmek için C# öğreticilerini incelemeyi deneyin.
C# nesne odaklı, bileşen odaklı bir programlama dilidir. C# bu kavramları doğrudan desteklemek için dil yapıları sağlar ve bu da C# dilini yazılım bileşenlerinin oluşturularak kullanıla bir doğal dil olması sağlar. C# kaynağından bu yana yeni iş yüklerini ve yeni ortaya çıkan yazılım tasarımı uygulamalarını desteklemek için özellikler eklemektedir. C# temel olarak nesne odaklı bir dildir . Türleri ve bunların davranışlarını siz tanımlarsiniz.
Çeşitli C# özellikleri sağlam ve dayanıklı uygulamalar oluşturmanıza yardımcı olur. Atık toplama , erişilemez durumdaki nesneler tarafından kapladığı belleği otomatik olarak geri verir. Null değere sahip türler, ayrılan nesnelere başvurul olmayan değişkenlere karşı koruma sağlar. Özel durum işleme, hata algılama ve kurtarma için yapılandırılmış ve genişletilebilir bir yaklaşım sağlar. Lambda ifadeleri işlevsel programlama tekniklerini destekler. Language Integrated Query (LINQ) söz dizimi, herhangi bir kaynaktan gelen verilerle çalışmak için ortak bir desen oluşturur. Zaman uyumsuz işlemler için dil desteği, dağıtılmış sistemler için söz dizimi sağlar. C# birleşik bir tür sistemine sahiptir. ve gibi ilkel türler de dahil olmak üzere tüm int
C# türleri double
tek bir kök türünden devralınabilir object
. Tüm türler bir dizi ortak işlem paylaşır. Herhangi bir türe sahip değerler tutarlı bir şekilde depolanmış, taşımalı ve üzerinde işletilebilir. Ayrıca, C# hem kullanıcı tanımlı başvuru türlerini hem de değertürlerini destekler. C#, nesnelerin dinamik olarak ayırmaya ve basit yapıların satır içinde depolanmasına olanak sağlar. C#, daha fazla tür güvenliği ve performansı sağlayan genel yöntemleri ve türleri destekler. C#, koleksiyon sınıflarını uygulayanların istemci kodu için özel davranışlar tanımlamalarını sağlayan bir yenidenlayıcı sağlar.
C#, programların ve kitaplıkların zaman içinde uyumlu bir şekilde gelişene kadar devam etmek için sürüm geliştirmeyi vurgular. C# tasarımının virtual
override
sürümle ilgili önemli noktalardan doğrudan etkileniyor olan yönleri ayrı ve değiştiriciler, yöntem aşırı yükleme çözümlemesi kuralları ve açık arabirim üyesi bildirimleri için destek içerir.
.NET mimarisi
C# programları .NET üzerinde, ortak dil çalışma zamanı (CLR) adlı bir sanal yürütme sistemi ve bir sınıf kitaplıkları kümesi üzerinde çalışır. CLR, microsoft tarafından uluslararası bir standart olan ortak dil altyapısının (CLI) uygulanmasıdır. CLI, dillerin ve kitaplıkların birlikte sorunsuz bir şekilde birlikte çalışıp çalışmalarına izin verilemayacak yürütme ve geliştirme ortamları oluşturmanın temelini oluşturuyor.
C# dilinde yazılan kaynak kodu, CLI belirtimine uygun bir ara dil (IL) olarak derlenmiş. IL kodu ve bit eşlemler ve dizeler gibi kaynaklar genellikle bir derlemede depolanır ve genellikle bir .dll. Derleme, derlemenin türleri, sürümü ve kültürü hakkında bilgi sağlayan bir bildirim içerir.
C# programı yürütülürken derleme CLR'ye yüklenir. CLR, IL kodunu yerel makine yönergelerine dönüştürmek için Tam Zamanında (JIT) derleme gerçekleştirir. CLR otomatik çöp toplama, özel durum işleme ve kaynak yönetimi ile ilgili diğer hizmetleri sağlar. CLR tarafından yürütülen kodlar bazen "yönetilen kod" olarak adlandırılır. "Unmanaged code", belirli bir platformu hedef alan yerel makine diline derlenmiş.
Dil birlikte çalışabilirliği, .NET'in önemli bir özelliğidir. C# derleyicisi tarafından üretilen IL kodu Ortak Tür Belirtimine (CTS) uygun. C# ile oluşturulan IL kodu, F#, Visual Basic, C++ .NET sürümlerinden oluşturulan kodla etkileşime olabilir. 20'den fazla CTS uyumlu dil daha vardır. Tek bir derleme, farklı .NET dillerinde yazılmış birden çok modül içerebilir. Türler aynı dilde yazılmış gibi birbirine başvurur.
.NET, çalışma zamanı hizmetlerine ek olarak kapsamlı kitaplıklar da içerir. Bu kitaplıklar birçok farklı iş yükünü destekler. Bunlar çok çeşitli yararlı işlevler sağlayan ad alanları olarak düzenlenmiştir. Kitaplıklar, dosya girişi ve çıkışından dize işlemeye, XML ayrıştırmaya, web uygulaması çerçevelerine ve Windows Forms denetimlerini içerir. Tipik C# uygulaması yaygın "su işleri" işlerini işlemek için .NET sınıf kitaplığını yaygın olarak kullanır.
.NET hakkında daha fazla bilgi için bkz. .NET'e Genel Bakış.
Merhaba dünya
"Hello, World" programı geleneksel olarak bir programlama dilini tanıtmak için kullanılır. Burada C# içindedir:
using System;
class Hello
{
static void Main()
{
Console.WriteLine("Hello, World");
}
}
"Hello, World" programı ad alanına başvurulan using
bir yönergeyle System
başlar. Ad alanları, C# programlarını ve kitaplıklarını düzenlemek için hiyerarşik bir hizmet sağlar. Ad alanları türleri ve diğer ad alanlarını içerir; örneğin ad alanı, System
Console
programda başvurulan sınıf gibi bir dizi tür ve ve gibi diğer ad alanlarını IO
içerir Collections
. Verilen using
ad alanına başvurulan bir yönerge, bu ad alanının üyesi olan türlerin tam olmayan kullanımını sağlar. yönergesi using
nedeniyle, program için shorthand Console.WriteLine
olarak kullanabilir System.Console.WriteLine
.
Hello
"Hello, World" programı tarafından bildirilen sınıfın adlı tek bir üyesi vardırMain
. yöntemi Main
değiştiricisi ile static
bildirildi. Örnek yöntemleri anahtar sözcüğünü kullanarak belirli bir kapsayan this
nesne örneğine başvurarken, statik yöntemler belirli bir nesneye başvuru olmadan çalışır. Kural gereği, adlı statik bir yöntem Main
C# programının giriş noktası olarak görev gösterir.
Programın çıktısı, ad alanı içinde WriteLine
sınıfının yöntemi Console
tarafından System
üretir. Bu sınıf, varsayılan olarak derleyici tarafından otomatik olarak başvurulan standart sınıf kitaplıkları tarafından sağlanır.
Türler ve değişkenler
Tür , C# içinde herhangi bir verinin yapısını ve davranışını tanımlar. Bir türün bildirimi üyelerini, temel türünü, uygulayan arabirimleri ve bu tür için izin verilen işlemleri içerebilir. Değişken , belirli bir tür örneğine başvuran bir etikettir.
C# içinde iki tür türü vardır: değer türleri vebaşvuru türleri. Değer türlerinin değişkenleri doğrudan verilerini içerir. Başvuru türlerinin değişkenleri, verilerine yapılan başvuruları depolar; ikincisi nesne olarak bilinir. Başvuru türleriyle, iki değişkenin aynı nesneye başvurarak bir değişkendeki işlemlerin diğer değişken tarafından başvurulan nesneyi etkilemesi mümkündür. Değer türleriyle, değişkenlerin her birinin kendi veri kopyası vardır ve birteki işlemlerin birbirini etkilemesi mümkün değildir ( ref
out
ve parametre değişkenleri hariç).
Tanımlayıcı bir değişken adıdır. Tanımlayıcı, boşluk olmadan unicode karakter dizisidir. Tanımlayıcı, ön eke sahipse C# ayrılmış sözcüğü olabilir @
. Tanımlayıcı olarak ayrılmış bir sözcük kullanmak, diğer dillerle etkileşimde bulunmak için yararlı olabilir.
C# değerinin değer türleri basit türlere ,enum türlerine , yapı türlerine, null değer türlerine ve tuple değer türlerine bölündü. C# başvuru türleri sınıf türlerine, arabirim türlerine, dizi türlerine ve temsilcitürlerine daha fazla bölündü.
Aşağıdaki ana hat, C#'nin tür sistemine genel bir bakış sağlar.
- Değer türleri
- Basit türler
- İmzalı tam tamsayı: ,
short
, ,int
long
- Unsigned integral: ,
ushort
, ,uint
ulong
- Unicode karakterleri: UTF-16 kod birimini temsil eden
- IEEE ikili kayan noktası: ,
double
- Yüksek duyarlıklı ondalık kayan nokta:
- Boolean:
bool
Veya olan Boole değerlerini temsil edentrue
değerlerfalse
- İmzalı tam tamsayı: ,
- Enum türleri
- formunun kullanıcı tanımlı türleri
enum E {...}
. Türenum
, adlandırılmış sabitlere sahip ayrı bir tür olur. Herenum
türün, sekiz tamsayı türünden biri olması gereken bir temel türü vardır. Bir türün değerenum
kümesi, temel alınan türün değer kümesiyle aynıdır.
- formunun kullanıcı tanımlı türleri
- Yapı türleri
- Formun kullanıcı tanımlı türleri
struct S {...}
- Formun kullanıcı tanımlı türleri
- Boş değer atanabilen değer türleri
- Değere sahip diğer tüm değer türlerinin uzantıları
null
- Değere sahip diğer tüm değer türlerinin uzantıları
- Tuple değer türleri
- Formun kullanıcı tanımlı türleri
(T1, T2, ...)
- Formun kullanıcı tanımlı türleri
- Basit türler
- Başvuru türleri
- Sınıf türleri
- Diğer tüm türlerin nihai temel sınıfı:
object
- Unicode dizeleri: UTF-16 kod birimleri dizisini temsil eden
- Formun kullanıcı tanımlı türleri
class C {...}
- Diğer tüm türlerin nihai temel sınıfı:
- Arabirim türleri
- Formun kullanıcı tanımlı türleri
interface I {...}
- Formun kullanıcı tanımlı türleri
- Dizi türleri
- Tek boyutlu, çok boyutlu ve etiketli. Örneğin:
int[]
,int[,]
veint[][]
- Tek boyutlu, çok boyutlu ve etiketli. Örneğin:
- Temsilci türleri
- Formun kullanıcı tanımlı türleri
delegate int D(...)
- Formun kullanıcı tanımlı türleri
- Sınıf türleri
C# programları, yeni türler oluşturmak için tür bildirimlerini kullanır. Tür bildirimi, yeni türün adını ve üyelerini belirtir. C# kategorisinin altı türü kullanıcı tarafından tanımlanabilir: sınıf türleri, yapı türleri, arabirim türleri, enum türleri, temsilci türleri ve tuple değer türleri. Ayrıca, veya record
türlerini bildiresinizrecord struct
record class
. Kayıt türlerinin derleyici sentezlenmiş üyeleri vardır. Kayıtları en az ilişkili davranışla değerleri depolamak için kullanırsınız.
- Tür
class
, veri üyelerini (alanlar) ve işlev üyelerini (yöntemler, özellikler ve diğerleri) içeren bir veri yapısını tanımlar. Sınıf türleri tek devralmayı ve çok biçimliliği destekler; türetilmiş sınıfların temel sınıfları genişleterek ve özelleyebilinir mekanizmalar. - Tür
struct
, veri üyeleri ve işlev üyelerine sahip bir yapıyı temsil eden sınıf türüne benzer. Ancak, sınıfların aksine, yapılar değer türleridir ve genellikle yığın ayırma gerektirmez. Yapı türleri kullanıcı tarafından belirtilen devralmayı desteklemez ve tüm yapı türleri türünden örtülü olarak devralın.object
- Tür
interface
, bir sözleşmeyi adlandırılmış ortak üye kümesi olarak tanımlar. uygulayanclass
veya, arabirimininterface
üyelerinin uygulamalarını sağlaystruct
gerekir. Birinterface
, birden çok temel arabirimden devralabilir ve bir veyaclass
birdenstruct
çok arabirim kullanabilir. - Tür
delegate
, belirli bir parametre listesi ve dönüş türüne sahip yöntemlere yapılan başvuruları temsil eder. Temsilciler, yöntemleri değişkenlere atanabilir ve parametre olarak geçirilen varlıklar olarak kabul edilebilir. Temsilciler, işlev dilleri tarafından sağlanan işlev türlerine benzer. Bunlar, diğer bazı dillerde bulunan işlev işaretçileri kavramına da benzer. İşlev işaretçileri aksine, temsilciler nesne odaklı ve tür güvenlidir.
, class
, struct
interface
ve türleridelegate
, diğer türlerle parametreli hale getirildiklerinden tüm genel türleri destekler.
C# herhangi bir türde tek boyutlu ve çok boyutlu dizileri destekler. Yukarıda listelenen türlerin aksine, dizi türlerinin kullanılamadan önce bildirilene gerek yok. Bunun yerine, dizi türleri köşeli ayraç içeren bir tür adı takip tarafından oluşturulur. Örneğin, tek int[]
int
boyutlu bir dizisidir, int
int[,]
int[][]
iki boyutlu bir dizisidir ve tek boyutlu dizilerden veya "jagged" dizisinin tek boyutlu bir dizisidirint
.
Null değere sahip türler için ayrı bir tanım gerekli değildir. Null değere sahip olmayan her tür T
için, ek T?
bir değere sahip olan karşılık gelen null değere değiştirilebilir bir tür vardır null
. Örneğin, herhangi int?
bir 32 bit null
string?
tamsayıyı veya değerini tuta bir tür ve herhangi birini veya değerini tutan string
bir tür.null
C#'nin tür sistemi, herhangi bir türün değeri olarak kabul edilebilir şekilde birleştirilmiştir object
. C# içinde her tür doğrudan veya dolaylı olarak object
sınıf türünden türetir ve object
tüm türlerin nihai temel sınıfıdır. Başvuru türlerinin değerleri, değerleri türünde görüntüılarak nesne olarak kabul edilir object
. Değer türlerinin değerleri, kutulama ve kutudan açma işlemleri gerçekleştirereknesne olarak kabul edilir. Aşağıdaki örnekte, bir değer int
değerine dönüştürülür ve object
tekrar değerine dönüştürülür int
.
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
Bir başvuruya bir değer türü değeri atandığı zaman object
, değeri tutmak için bir "kutu" ayrılır. Bu kutu bir başvuru türünün örneğidir ve değer bu kutuya kopyalanır. Buna karşılık, bir başvuru object
bir değer türüne object
türe göre başvurulan bir kutu olduğunu onaylar. Onay başarılı olursa, kutu içinde yer alan değer değer türüne kopyalanır.
C#'nin birleşik tür sistemi, değer türlerinin "isteğe bağlı" başvuru object
olarak kabul edilen bir sistem olduğu anlamına gelir. Birleştirme nedeniyle, türünü kullanan object
object
genel amaçlı kitaplıklar, hem başvuru türleri hem de değer türleri dahil olmak üzere ' den türeten tüm türlerle kullanılabilir.
C# içinde alanlar , dizi öğeleri, yerel değişkenler ve parametreler gibi çeşitli değişken türleri vardır. Değişkenler depolama konumlarını temsil eder. Her değişkenin, aşağıda gösterildiği gibi değişkende depolanmış olan değerleri belirleyen bir türü vardır.
- Null değere sahip olmayan değer türü
- Tam türün değeri
- Null değer değer türü
- Tam
null
türe sahip bir değer veya değer
- Tam
- object
- Başvuru
null
, herhangi bir başvuru türüne sahip bir nesneye başvuru veya herhangi bir değer türünün kutu değerli değerine başvuru
- Başvuru
- Sınıf türü
- Bir
null
başvuru, bu sınıf türünün bir örneğine başvuru veya bu sınıf türünden türetilen bir sınıfın örneğine başvuru
- Bir
- Arabirim türü
- Başvuru
null
, bu arabirim türünü uygulayan bir sınıf türünün örneğine başvuru veya bu arabirim türünü uygulayan bir değer türünün kutusal değerine başvuru
- Başvuru
- Dizi türü
- Bir
null
başvuru, bu dizi türünün bir örneğine başvuru veya uyumlu bir dizi türünün örneğine başvuru
- Bir
- Temsilci türü
- Uyumlu
null
bir temsilci türünün örneğine başvuru veya başvuru
- Uyumlu
Program yapısı
C# içinde temel kurumsal kavramlar programlar, ad alanları, türler, üyeler ve derlemelerdir. Programlar, üyeleri içeren ve ad alanları olarak düzenlen içeren türleri bildirmektedir. Sınıflar, yapılar ve arabirimler türlere örnektir. Alanlar, yöntemler, özellikler ve olaylar üyelerin örnekleridir. C# programları derlenmiş olduğunda, fiziksel olarak derlemeler içine paketlenmiş olur. Derlemeler, sırasıyla uygulama veya .exe
.dll
kitaplık uygulamalarına bağlı olarak genellikle .exe
uzantısına veya 'ye sahiptir.
Küçük bir örnek olarak, aşağıdaki kodu içeren bir derlemeyi göz önünde bulundurabilirsiniz:
namespace Acme.Collections;
public class Stack<T>
{
Entry _top;
public void Push(T data)
{
_top = new Entry(_top, data);
}
public T Pop()
{
if (_top == null)
{
throw new InvalidOperationException();
}
T result = _top.Data;
_top = _top.Next;
return result;
}
class Entry
{
public Entry Next { get; set; }
public T Data { get; set; }
public Entry(Entry next, T data)
{
Next = next;
Data = data;
}
}
}
Bu sınıfın tam adı olur Acme.Collections.Stack
. sınıfı birkaç üye içerir: adlı bir alan _top
, ve adlı iki yöntem Push
Pop
ve adlı iç içe geçmiş bir sınıf Entry
. Sınıfı Entry
daha fazla üç üye içerir: adlı bir özellik Next
, adlı bir özellik ve Data
bir oluşturucu. , Stack
genel bir Stack
. Bir tür parametresi vardır ve T
bu parametre kullanıldığında somut bir türle değiştirilir.
Yığın , "ilk gelen - son çıkar" (FILO) koleksiyonudur. Yığının en üstüne yeni öğeler eklenir. Bir öğe kaldırıldığı zaman, yığının üst kısmından kaldırılır. Önceki örnek, bir yığının Stack
depolama alanını ve davranışını tanımlayan türü bildirmektedir. Bu işlevi kullanmak için türünün bir örneğine başvuran Stack
bir değişken bildirsiniz.
Derlemeler, Ara Dil (IL) yönergeleri ve meta veriler şeklinde sembolik bilgiler şeklinde yürütülebilir kod içerir. Yürütülmeden önce, .NET Ortak Dil Çalışma Zamanı'nın Tam Zamanında (JIT) derleyicisi, derlemede IL kodunu işlemciye özgü koda dönüştürür.
Derleme hem kodu hem de meta verileri içeren kendini açıklayan bir işlev birimi olduğundan, #include
C# içinde yönergelere ve üst bilgi dosyalarına gerek yoktur. Belirli bir derlemede yer alan ortak türler ve üyeler, yalnızca programı derlemek için bu derlemeye başvurarak bir C# programında kullanılabilir hale yapılır. Örneğin, bu program derlemeden Acme.Collections.Stack
sınıfını acme.dll
kullanır:
class Example
{
public static void Main()
{
var s = new Acme.Collections.Stack<int>();
s.Push(1); // stack contains 1
s.Push(10); // stack contains 1, 10
s.Push(100); // stack contains 1, 10, 100
Console.WriteLine(s.Pop()); // stack contains 1, 10
Console.WriteLine(s.Pop()); // stack contains 1
Console.WriteLine(s.Pop()); // stack is empty
}
}
Bu programı derlemek için önceki örnekte tanımlanan yığın sınıfını içeren derlemeye başvurabilirsiniz.
C# programları çeşitli kaynak dosyalarda depolanmış olabilir. Bir C# programı derlendiğinde, tüm kaynak dosyalar birlikte işlenir ve kaynak dosyalar birbirine ücretsiz olarak başvurur. Kavramsal olarak, tüm kaynak dosyalar işlenmeden önce tek bir büyük dosyada birlenmiş gibi olur. Birkaç özel durum dışında bildirim sırası önemsiz olduğundan, C# içinde hiçbir zaman ileri bildirim gerekmez. C# bir kaynak dosyayı yalnızca bir ortak türü bildirecek şekilde sınırlamaz ve kaynak dosyanın adının kaynak dosyada bildirilen bir türle eşleşmesi için gerekli değildir.
Bu turda yer alan diğer makalelerde bu kurumsal bloklar açıklayacak.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin