close

C Keskin

Navigasyona git Aramaya git
C#
C Keskin wordmark.svg
Af-Helloworld (C Sharp).svg
Geliştirici(ler)
Microsoft
https://docs.microsoft.com/en-us/dotnet/csharp/ , https://docs.microsoft.com/de-de/dotnet/csharp/ , https://docs.microsoft.com/ja -jp/dotnet/csharp/ , https://docs.microsoft.com/fr-fr/dotnet/csharp/ ve https://docs.microsoft.com/it-it/dotnet/csharp/
Genel bilgi
Ortak Uzantılar .cs .csx .cshtml .razor
paradigma Çoklu paradigma : yapılandırılmış , zorunlu , nesne yönelimli , olaya dayalı , işlevsel , genel , yansıtıcı
Ortaya çıkan 2000
Tarafından dizayn edilmiştir microsoft
En son kararlı sürüm 10.0 (21 Mart 2022 (6 ay 27 gün))
Testlerdeki son sürüm 11.0
tip sistemi Statik , Dinamik , Güçlü , Güvenli , Derecelendirilmiş
uygulamalar Microsoft .NET , Microsoft .NET Core , Mono ve DotGNU
lehçeler , Spec Sharp, Polifonik C#
tarafından etkilenmiş Java , C++ , Eyfel , Modula-3 , Pascal
etkiledi D , F# , Java 5 , Vala
İşletim sistemi Çoklu platform

"C#" ( İngilizcede cii sharp olarak telaffuz edilir), Microsoft şirketi tarafından .NET platformunun bir parçası olarak geliştirilmiş ve standartlaştırılmış , daha sonra ECMA (ECMA-334) ve ISO tarafından standart olarak onaylanan çok paradigmalı bir programlama dilidir ( ISO/IEC23270). C#, Common Language Framework için tasarlanmış programlama dillerinden biridir .

Temel sözdizimi C / C++ 'dan türetilmiştir ve diğer dillerden türetilen iyileştirmeler içermesine rağmen Java'nınkine benzer .NET platform nesne modelini kullanır .

C Sharp ismi , İngilizce'de müzik notaları için keskin olarak okunan işaretinden esinlenmiştir. Bu bir kelime oyunudur, çünkü "C#" müzikal anlamda "C keskin" anlamına gelir, burada # sembolü bir notanın (bu durumda C, C ile temsil edilir ) bir yarım ton daha yüksek olması gerektiğini belirtir. Bu, C#'ın selefi C++'a göre üstünlüğünün bir metaforudur ve karşılığında C++'a adını vermek için tasarlanmış aynı metafora gönderme yapar. [ 1 ] Ek olarak, # sembolü dört + sembolün birleşimi olarak hayal edilebilir , böylece C dillerinin ilerleme duygusunu devam ettirir.

C#, .NET platformunun bir parçası olmasına rağmen, bir API'dir , C# ise platformun üzerine programlar oluşturmak için tasarlanmış ayrı bir programlama dilidir. Microsoft Windows , Unix , Android , iOS , Windows Phone , Mac OS ve GNU/Linux gibi farklı platformlar için programlar üreten Mono - DotGNU çerçevesini sağlayan gerçekleştirilmiş bir derleyici zaten var .

Tarih

.NET platformunun geliştirilmesi sırasında, sınıf kitaplıkları başlangıçta Simple Managed C (SMC) adı verilen yönetilen bir kod sistemi kullanılarak yazılmıştır. Nisan 1999'da Anders Hejlsberg , yeni bir nesne yönelimli dil geliştirme misyonuyla bir ekip kurdu . Bu ad, marka sorunları nedeniyle C# olarak adlandırılmak zorunda kaldı. [ 2 ] .NET platform sınıf kitaplığı, daha sonra Joseth M.

Hejlsberg, C# geliştirme projesini yönetti. Daha önce Turbo Pascal , Delphi ve J++ gibi diğer dillerin geliştirilmesine de katılmıştı .

Veri türleri

C#, yerleşik veri türlerinin yirmi genel kategorisini içerir : değer türleri ve başvuru türleri . Değer türü terimi , bu türlerin doğrudan kendi değerlerini içerdiğini belirtir. Tamsayıları tanımlamak için türler :

Tamsayı veri türü
İnsan BCL Eşdeğeri Boyut Aralık Anlam
byte System.Byte 8 bit (1 bayt) 0 - 255 İşaretsiz tam sayı
sbyte System.SByte 8 bit (1 bayt) -128 ila 127 imzalı tam sayı
short System.Int16 16 bit (2 bayt) -32.768 ila 32.767 imzalı kısa tam sayı
ushort System.UInt16 16 bit (2 bayt) 0 ila 65.535 İşaretsiz kısa tamsayı
int System.Int32 32 bit (4 bayt) -2.147.483.648 ila 2.147.483.647 işaretli orta tam sayı
uint System.UInt32 32 bit (4 bayt) 0 - 4,294,967,295 işaretsiz orta tam sayı
long System.Int64 64 bit (8 bayt) -9,223,372,036,854,775,808 ila 9,223,372,036,854,775,807 imzalı uzun tamsayı
ulong System.UInt64 64 bit (8 bayt) 0 ila 18,446,744,073,709,551,615 İşaretsiz uzun tamsayı

Kayan nokta türleri , sayıları kesirli bileşenlerle temsil edebilir. İki tür kayan nokta türü vardır: float ve double . Double türü, C# sınıf kitaplığındaki birçok matematiksel işlev çift değerler kullandığından en sık kullanılan türdür . Belki de C#'daki en ilginç kayan nokta türü, parasal hesaplamalarda kullanılması amaçlanan ondalıktır . Normal kayan nokta aritmetiği, ondalık değerlere uygulandığında çeşitli yuvarlama hatalarına tabidir. Ondalık tür , bu hataları ortadan kaldırır ve 28 ondalık basamağa kadar temsil edebilir .

kayan nokta veri türü
İnsan BCL Eşdeğeri Boyut Aralık Anlam
float System.Single 32 bit (4 bayt) ±1.401298E−45 ila ±3.402823E+38 kısa kayan nokta
double System.Double 64 bit (8 bayt) ±4.94065645841246E−324 ila
±1.79769313486232E+308
uzun kayan nokta
decimal System.Decimal 128 bit (16 bayt) −7.9228162514264337593543950335 -
+7.92281625142643375935439950335
Parasal kayan nokta

C #'daki karakterler , diğer birçok programlama dilinde olduğu gibi 8 bit boyutunda değildir, bunun yerine 16 bit boyutundadır. Bu veri türü çağrılır charve Unicode kodlamasını kullanır . Tamsayı türünden otomatik dönüştürme yoktur char.

Karakter veri türü
İnsan BCL Eşdeğeri Boyut Aralık Anlam
char System.Char 16 bit (2 bayt) '\u0000'a'\uFFFF' tek kodlu karakter

Mantıksal veri türleri için tamsayı türünden bool.

Mantıksal veri türü
İnsan BCL Eşdeğeri Boyut Aralık Anlam
bool System.Boolean 8 bit (1 bayt) trueherhangi birifalse Doğru ya da yanlış

Değişmezler

Bazen 10 yerine 16 tabanlı bir sayı sistemi kullanmak daha kolaydır, bu durumda C# tam sayıları onaltılık0x biçimde belirtmenize izin verir ve örneğin ondalık sayıya0xFF eşdeğer olan 255: önüne eklenerek tanımlanır .

C#, klavyede görsel temsili olmayan sembolleri yazmayı kolaylaştırmak için kaçış dizileri adı verilen karakterlere sahiptir.

C#, C++ gibi bir dize türü tanımlar . Karakter dizisi içinde kaçış dizileri kullanılabilir. Bir karakter dizisi sembolle başlayabilir, @ardından tırnak ( ") içinde bir dize gelebilir, bu durumda kaçış dizilerinin hiçbir etkisi olmaz ve dize iki veya daha fazla satıra yayılabilir.

tam sayılar
ondalık 245,[0..9]+
onaltılık 0xF5,0x[0..9, A..F, a..f]+
uzun tam sayı 12L
işaretsiz uzun tamsayı 654UL
kayan nokta
batmadan yüzmek 23.5F, 23.5f; 1.72E3F, 1.72E3f, 1.72e3F,1.72e3f
çift 23.5, 23.5D, 23.5d, 1.72E3,1.72E3D
ondalık 9.95M
karakterler
karakter 'a', 'Z','\u0231'
Zincirler
Sicim "Hello, world"; "C:\\Windows\\",@"C:\Windows\"
Kaçış dizileri
Uyarı (zil) \a
geri tepme \b
sayfa beslemesi \f
Yeni hat \n
Araba dönüşü \r
yatay sekme \t
dikey sekme \v
Hükümsüz \0
tek alıntı \'
çift ​​alıntı \"
ters çubuk \\

Değişkenler

Değişkenler, değerlerle ilişkili tanımlayıcılardır. Depolanacak verilerin türünü ve tanımlayıcısını belirterek bildirilirler.

Bir tanımlayıcı şunları yapabilir:

  • La başlamak "_".
  • büyük ve küçük Unicode karakterleri içerir (büyük/küçük harfe duyarlı ).

Bir tanımlayıcı şunları yapamaz:

  • bir sayı ile başlayın.
  • bir anahtar kelimeyle değil, bir sembolle başlayın.
  • 511'den fazla karakter içerir.

Bir değişken bildirin:

int  myNumber ;  // Değişkeni bildiririz, ancak onu herhangi bir değerle başlatmayız.

Bir değişkene değer atamak için, tanımlayıcısı belirtilir, ardından eşittir sembolü ( =) ve saklamasını istediğimiz değer gelir:

myNumber  =  5 ;  // Oluşturulan değişkene '5' değerini atadık.

Aynı anda bir değer bildirebilir ve atayabilirsiniz:

int  myNumber  =  5 ;  // Değişkeni tanımlıyoruz ve '5' değerini atadık.

Ayrıca , derleyicinin değişkene atanacak veri türünü belirlediği ve parametreler veya veri üyeleri için değil, yalnızca yerel değişkenler için izin verildiği anahtar sözcük çıkarım mekanizmasını kullanarak, veri türünü belirtmeden bir değişken bildirebilirsiniz .var

var  string  =  "Bu bir string" ;

var  sayı1  =  5 ;

var  sayı2  =  4,5 ;

var  sayı3  =  4.5D ;

var  nesne  =  yeni  Nesne ();

var  sonuç  =  Matematik . Pow ( 5 ,  2 );

C#'daki değişken türü dönüştürmeleri, satırın kaynak ve sütunun hedef olduğu aşağıdaki tabloda temsil edilmektedir.

Efsane
Kırmızı Uyumsuz dönüştürme (I).
Yeşil Otomatik veya örtük dönüştürme (A).
Mavi Açık dönüştürme (E).
Veri türü dönüşümleri
bayt sbyte şort kısa int uint uzun uzun batmadan yüzmek çift ondalık karakter bool
bayt VE A A A A A A VE VE VE VE sen
sbyte VE A VE A VE A A VE VE VE VE sen
şort VE VE VE A A A A VE VE VE VE sen
kısa VE VE VE A A A A VE VE VE VE sen
int VE VE VE VE VE A A VE VE VE VE sen
uint VE VE VE VE VE A A VE VE VE VE sen
uzun VE VE VE VE VE VE VE VE VE VE VE sen
uzun VE VE VE VE VE VE VE VE VE VE VE sen
batmadan yüzmek VE VE VE VE VE VE VE VE A VE sen sen
çift VE VE VE VE VE VE VE VE VE VE sen sen
ondalık VE VE VE VE VE VE VE VE VE VE sen sen
karakter VE VE VE A A A A A A A A sen
bool sen sen sen sen sen sen sen sen sen sen sen sen
  • Herhangi bir örtük dönüştürme, bilgi kaybına, kesilmeye veya yuvarlamaya neden olmaz .
  • Açık bir dönüştürmede bilgi kaybı, kesme veya yuvarlama olması (her zaman böyle olmasa da) mümkündür.
  • Herhangi bir örtük dönüştürmede, hedef veri türü, kaynak veri türünden daha büyüktür.
  • Açık dönüştürme, parantezler arasında dönüştürmek istediğiniz veri türünü ve ardından değeri belirterek yapılır:
uzunluk  değeri  =  123 ;  // Örtük dönüştürme 
uzun  değeri  =  ( uzun ) 123 ;  // açık dönüştürme

Bir atama içinde gerçekleştirilmeye ek olarak, her işlemde her iki işlenenin de aynı türde olması gerektiğinden, tür dönüştürmeleri de bir ifade içinde gerçekleşir. Dönüştürme örtük türdeyse, bu sırayla aşağıdaki algoritma gerçekleştirilir:

  1. Bir işlenen ise decimal, diğer işlenen dönüştürülür decimal.
  2. Bir işlenen ise double, diğer işlenen dönüştürülür double.
  3. Bir işlenen ise float, diğer işlenen dönüştürülür float.
  4. Bir işlenen ise ulong, diğer işlenen dönüştürülür ulong.
  5. Bir işlenen ise long, diğer işlenen dönüştürülür long.
  6. Bir işlenen uint, ve diğer işlenen sbyte, shortveya türündeyse int, her ikisi de 'ye dönüştürülür long.
  7. Bir işlenen ise uint, diğer işlenen dönüştürülür uint.
  8. Önceki durumlardan hiçbiri değilse, iki işlenen dönüştürülür int.

Sabitler

Sabitler değişmez değerlerdir ve bu nedenle değiştirilemezler.

const

Anahtar kelime ile bir sabit bildirildiğinde const, değer de atanmalıdır. Bundan sonra sabit kilitlenir ve değiştirilemez. Bunlar örtük olarak statiktir ( static).

sabit  çift  PI  =  3.1415 ;

readonly

Farklı olarak const, bildirildiği anda değerin atanmasını gerektirmez. Örneğinin üyeleri veya sınıfın ( static) statik üyeleri olabilirler.

salt okunur  çift  E ; 
E  =  2.71828 ;

Operatörler

Kategori operatörler
aritmetik + - * / %
mantıklı ! && ||
bit düzeyinde & | ^ ~
birleştirme +
artış, azalma ++ --
Yer değiştirme << >>
ilişkisel == != < > <= >=
Atama =^= <<= >>= ??=
Üye Erişimi .
indeksleme [ ]
Dönüştürmek ( )
koşullu ? : ??
nesne oluşturma new
tür bilgisi as is sizeof typeof
  • Aritmetik operatörler, C ve C++ ile aynı şekilde çalışır.
  • İlişkisel ve mantıksal işleçlerin sonucu bir tür değeridir bool.
  • Kısa devre operatörleri ikinci işleneni yalnızca gerektiğinde değerlendirir.
  • Bitsel operatörler bool, float, doubleveya türlerine uygulanamaz decimal.

Kontrol talimatları

if-else

if  ( i  ==  2 )  
{ 
    // ... 
} 
else  if  ( i  ==  3 )  
{ 
    // ... 
} 
else  
{ 
    // ... 
}

switch

switch  ( i )  
{ 
    durum  1 : 
        ... 
        break ; 
    durum  2 : 
    durum  3 : 
        ... 
        ara ; 
    varsayılan : 
        ... 
        ara ; 
}

for

for  ( int  i  =  0 ;  ben  <  10 ;  ++ ben )  
{ 
    // ... 
}

while

while  ( ben  <  10 )  
{ 
    // ... 
}

do-while

do  
{ 
    // ... 
}  while  ( true );

foreach

foreach  ( charList'te char  c  )  { // ... } 

    

  • , , , , , , ifadeleri if-elsetemel forolarak C , C ++ ve Java whileile do-whileaynıdır .switchreturnbreakcontinue
  • İfade foreach, tıpkı Java'da olduğu gibi, bir dizinin veya koleksiyonun öğeleri arasında dolaşır. Bu döngüde, koleksiyon çaprazlanır ve değişken, her yinelemede söz konusu koleksiyondan bir öğe alır.
  • İfade goto, kullanımıyla ilgili tartışmalara rağmen hala C#'da kullanılmaktadır.

Yöntemler

  • Her metot bir sınıfın parçası olmalıdır, global metotlar (fonksiyonlar) yoktur.
  • Varsayılan olarak, parametreler değere göre iletilir. (Listelerin ve diğer koleksiyonların başvuruya göre değişkenler olduğuna (yığındaki o liste için ayrılan alana başvurular) ve başvurunun değere göre yönteme iletildiğine, ancak liste için ayrılan alanın ortak olduğuna dikkat edin, bu nedenle silerseniz bir öğe onu orijinalden de yapar).
  • Değiştirici ref, parametreleri değer yerine referans olarak iletmeye zorlar ve parametreyi geçmeden önce değişkeni başlatılmaya zorlar.
  • Değiştirici , parametreyi geçmeden önce değişkeni başlatmak zorunda kalmamanız dışında outdeğiştiriciye benzer .ref
  • Bir referans parametresi değiştirildiğinde refve outdeğiştirildiğinde, referansın kendisi referansla iletilir.
  • Değiştirici params, bir dizi olarak uygulanan değişken sayıda argüman tanımlamak için kullanılır.
  • Bir metodun en fazla tek bir parametresi paramsolmalıdır ve bu sonuncusu olmalıdır.
  • Bir yöntem, sınıf türleri de dahil olmak üzere herhangi bir veri türünü döndürebilir.
  • Diziler C#'ta nesneler olarak uygulandığından, bir yöntem bir dizi de döndürebilir (bu, dizilerin geçerli dönüş türleri olmaması nedeniyle C++'dan farklıdır).
  • C#, yöntem aşırı yüklemesini uygular , iki veya daha fazla yöntem, parametreleri farklı olduğu sürece aynı ada sahip olabilir.
  • Yöntem Main, programın başlangıç ​​noktasının atıfta bulunduğu özel bir yöntemdir.

ref

void  PassRef ( ref  int  x )  
{ 
    if  ( x  ==  2 )  
    { 
        x  =  10 ; 
    } 
}

int  z  =  0 ; 
PassRef ( başvuru  z );

out

void  PassOut ( out  int  x )  
{ 
    x  =  2 ; 
}

int  z ; 
PassOut ( z dışarı  );

params

int  MaxVal ( char  c ,  parametreler  int []  sayılar ) 
{ 
    // ... 
}

int  a  =  1 ; 
MaxVal ( 'a' ,  23 ,  3 ,  bir ,  - 12 );  // İlk parametre zorunludur, ardından istediğiniz kadar tamsayı koyabilirsiniz

Sobrecarga de métodos

int  Toplam ( int  x ,  int  y )  
{ 
    dönüş  x  +  y ; 
} 
int  Toplam ( int  x ,  int  y ,  int  z )  
{ 
    dönüş  x  +  y  +  z ; 
} 
int  Toplam ( params  int []  sayılar )  
{ 
    int  Toplam  =  0 ; 
    foreach ( int  c  sayılarla  ) Toplam + = c ; Toplamı döndür ; }
          
     


Toplam ( 1 ,  2 );  // İlk metodu çağıracak. 
Toplam ( 1 ,  2 ,  3 );  // İkinci metodu çağıracak. 
Sum ( 1 ,  2 ,  3 ,  4 ,  5 ,  6 )  // Üçüncü metodu çağırır.

Main

public  static  void  Main ( string []  args )  
{ 
    // ... 
}

Matrisler

  • C#'da diziler nesne olarak uygulanır.
  • Dizi indeksleri 0'dan başlar.
  • C#, dizileri nesne olarak uyguladığından, her dizinin, Lengthtahsis edebileceği veya ayırdığı öğe sayısını içeren bir özelliği vardır.

Bir dizi bildirin:

int []  intArray  =  yeni  int [ 5 ];

Bir diziyi bildirin ve başlatın (dizi boyutu atlanabilir):

int []  intArray  =  yeni  int []  { 1 ,  2 ,  3 ,  4 ,  5 };

Bir öğeye erişin:

intArray [ 2 ];  // '3' değerini döndürecek

Çok boyutlu bir dizi bildirin:

int [,]  intMultiArray  =  yeni  int [ 3 ,  2 ];  // 3 satır ve 2 sütun

Çok boyutlu bir dizi bildirin ve başlatın (dizi boyutu atlanabilir):

int [,]  intMultiArray  =  yeni  int [,]  {  { 1 ,  2 },  { 3 ,  4 },  { 5 ,  6 }  };

Çok boyutlu bir dizinin bir öğesine erişin:

intMultiArray [ 2 ,  0 ];  // '5' değerini döndürecek

Daha fazla bilgi için: Dizi Eğitimi (C# ) .

Sınıflar ve nesneler

  • Belirli bir sınıfın nesne değişkeni, nesnenin değerlerini değil, referansını depolar (tıpkı Java gibi)
  • Atama operatörü, bir nesnenin değerlerini değil, ona yapılan referansı (tıpkı Java gibi) kopyalar.
  • Bir yapıcı, sınıfıyla aynı ada sahiptir ve sözdizimsel olarak bir yönteme benzer.
  • Bir yapıcı herhangi bir değer döndürmez (void bile).
  • Tıpkı yöntemler gibi, yapıcılar da aşırı yüklenebilir.
  • Bir sınıfta bir kurucu belirtilmemişse, tüm değişkenlere değer veya uygun şekilde atanmasından oluşan varsayılan bir 0kurucu nullkullanılır false.
  • Bir nesneye herhangi bir değişken tarafından başvuru yapılmadığında, çöp toplayıcı sınıfın yıkıcısını çalıştırır ve kullanılan belleği serbest bırakır.
  • Bir nesne kapsam dışına çıktığında bir sınıfın yıkıcısı çağrılmaz.
  • Bir program sona ermeden önce tüm yıkıcılar çağrılır.
  • Anahtar kelime this, kullanıldığı aynı nesneye bir referanstır.
  • Anahtar sözcük base, içinde kullanıldığı nesnenin (varsayılan olarak Object) üst sınıfına bir başvurudur.
  • Anahtar kelime static, bir üyeyi o sınıfın nesnelerinden ziyade bir sınıfa ait kılar. Böyle bir üyeye, sınıfının herhangi bir nesnesi oluşturulmadan önce ve bir nesneye referans olmadan erişilebilir.
  • Bir yöntemin staticreferansı yoktur this.
  • Bir metot staticsadece diğer metotları çağırabilir static.
  • Bir yöntemin staticyalnızca verilere doğrudan erişimi olmalıdır static.
  • staticBir örnek yerine bir sınıfa uygulanan öznitelikleri başlatmak için bir kurucu kullanılır.
  • C#, anahtar kelime ile operatörün aşırı yüklenmesine ( +, -, *, vb.) izin verir operator.
  • Nesneleri karşılaştırmak ( ==, !=, <, >, <=, >=) aynı nesneye atıfta bulunup bulunmadıklarını kontrol eder.

Bir sınıf bildirin:

sınıf  Sınıf  
{ 
}

Bir sınıf başlatın (sınıfın bir nesnesini oluşturma veya bir sınıfı başlatma olarak da adlandırılır ):

 c  Sınıfı =  yeni  Sınıf ();

Yapıcı (sanki bir yöntemmiş gibi, ancak sınıfının adıyla):

sınıf  Sınıf  
{ 
    Sınıf ()  
    { 
        // ... 
    } 
}

Yıkıcı (öncesinde ' ' sembolü olan bir yöntemmiş gibi ~):

sınıf  Sınıf  
{ 
    ~ Sınıf ()  
    { 
        // ... 
    } 
}

this:

sınıf  Sınıf  
{ 
    int  i  =  1 ; 
    Sınıf ()  
    { 
        bu . önyükleme ();  // Nesnenin 'Start' yöntemini çağıracak 
    } 
    void  Start ()   
    { 
        // ... 
    } 
}

static:

sınıf  Sınıf  
{ 
    statik  int  i  =  1 ; 
} 
Sınıf . ben ;  // '1' değerini döndürür. Bir nesne oluşturmak gerekli değildir, çünkü 'statik' olduğu için sınıfa aittir.

operator:

class  Class  
{ 
    static  int  operatörü  +( int  x ,  int  y )  
    { 
        // '+' operatörünü geçersiz kıl 
        // ... 
    } 
    static  int  operatörü  -( int  x ,  int  y )  
    { 
        // '-' operatörünü geçersiz kıl 
        / / ... 
    } 
    static  int  operatörü  int ( byte  x )  
    { 
        // 'byte' türünden 'int' türüne aşırı yük dönüşümü 
        // ... 
    } 
}

Nesne Karşılaştırması:

sınıf  Sınıf  
{ 
} 
Sınıf  c1  =  yeni  Sınıf (); 
Sınıf  c2  =  yeni  Sınıf (); 
bool  b  =  c1  ==  c2 ;  // İki farklı nesne oldukları için 'false' döndürür

Karakter dizileri

  • Karakter dizileri için veri türü string.
  • Anahtar sözcük stringaslında System.String.NET platform sınıfının bir diğer adıdır.
  • C#'da dizeler nesnelerdir ve bir karakter dizisi değildir; yine de, bir dizgeden dizine göre rastgele bir karakter elde edilebilir (ancak değiştirilemez).
  • Dizeler değişmezdir, oluşturulduktan sonra değiştirilemezler, yalnızca tamamen veya kısmen kopyalanabilirler.
  • Operatör ==, iki referansın aynı nesneye atıfta bulunup bulunmadığını belirler, ancak operatörün iki tip değişkenle kullanılması string, referanslarının değil, dizelerin içeriğinin eşitliğini test eder. Ancak, ve gibi diğer ilişkisel işleçlerle <referanslar >=karşılaştırılır.
  • Operatör kullanılarak iki dize birleştirilebilir (birleştirilebilir) +.
  • Dizeler ifadelerde kullanılabilir switch.

Bir karakter dizesi bildirin (sanki o gibi bir veri türünün değişkeniymiş gibi int) double:

string  text  =  "Karakter dizisi" ; 
string  metin  =  yeni  Sistem . String ( "Karakter dizisi" );  // Yukarıdakine eşdeğer

Bir dizenin uzunluğu:

string  text  =  "Karakter dizisi" ; 
int  ben  =  metin . uzunluk ;  // '20' döndürecek

İki dizeyi karşılaştırın:

bool  b  =  "metin"  ==  "metin" ;  // Her iki dize de "metin" içerdiğinden 'true' değerini döndürür

Dizeleri birleştir:

string  text  =  "Dizi"  +  " karakter" ;  // "karakterler"den önceki boşluğa dikkat edin, eğer koyulmazsa "karakterler"in yanında görünecektir

Sınıf System.Stringve onun bir örneği, stringdizelerle çalışmak için bazı yöntemlere sahiptir, örneğin:

static string Copy(string str): bir kopyasını döndürür str.

string  text1  =  "abc" ; 
string  text2  =  "xyz" ; 
string  text2  =  Sistem . Dize . Kopyala ( metin1 );  // 'text2' artık "abc" içeriyor

int CompareTo(string str): çağıran dizge dizgeden küçükse sıfırdan küçük, çağıran dizge dizgeden büyükse sıfırdan büyük ve dizgeler eşitse sıfır döndürür.

string  metin  =  "abc" ; 
int  ben  =  metin . Karşılaştır ( "abc" );  // '0' döndürecek

int IndexOf(string str): içinde belirtilen alt dizenin ilk eşleşmesinin dizinini strveya hata durumunda -1 döndürür.

string  metin  =  "abcdefabcdef" ; 
int  ben  =  metin . IndexOf ( "e" );  // '4' 
int  j  =  metin döndürür . IndexOf ( "def" );  // 'd' karakterinin bulunduğu '3' ve ardından 'e' ve 'f' döndürür

int LastIndexOf(string str): içinde belirtilen alt dizenin son eşleşmesinin dizinini strveya hata durumunda -1 döndürür.

string  metin  =  "abcdefabcdef" ; 
int  ben  =  metin . LastIndexOf ( "e" );  // '10' 
int  j  =  metin döndürür . LastIndexOf ( "def" );  // Son 'd' karakterinin bulunduğu, ardından 'e' ve 'f' gelen '9' değerini döndürür

string ToLower: dizenin bir kopyasını küçük harfle döndürür.

string  metin  =  "ABC" ; 
dize  metin  =  metin . Aşağıya ();  // "abc" döndürecek

string ToUpper: dizenin bir kopyasını büyük harfle döndürür.

string  metin  =  "abc" ; 
dize  metin  =  metin . Üst Üst ();  // "ABC" döndürecek

string Substring: başlangıç ​​konumunu ve istenen uzunluğu belirten bir alt dize döndürür.

string  text  =  "Karakter dizisi" ; 
dize  metin  =  metin . alt dize ( 10 ,  8 );  // "karakter" döndürür

Daha fazla bilgi: String (Class) (System ) .

LINQ (Dil Tümleşik Sorgu)

Dille Tümleşik Sorgu (LINQ), sorgu işlevlerinin C# dilinde (ayrıca Visual Basic'te ve potansiyel olarak başka herhangi bir .NET dilinde) doğrudan entegrasyonundan oluşan bir dizi teknolojinin adıdır. LINQ ile bir sorgu, tıpkı sınıflar, yöntemler, olaylar vb. gibi artık birinci sınıf bir dil yapısıdır.

Sorgu yazan bir programcı için, LINQ'nun en görünür dil yapısı sorgu ifadesidir. Sorgu ifadeleri, C# 3.0'da tanıtılan bildirime dayalı sorgu sözdiziminde yazılır. Sorgu söz dizimini kullanarak, veri kaynaklarında en az kodla karmaşık filtreleme, sıralama ve gruplama işlemlerini bile gerçekleştirebilirsiniz. Aynı temel sorgu ifadesi kalıpları, SQL veritabanlarından, ADO.NET veri kümelerinden, XML belgelerinden ve akışlarından ve .NET koleksiyonlarından verileri sorgulamak ve dönüştürmek için kullanılır.

Aşağıdaki örnek, tam sorgu işlemini gösterir. Tam işlem, bir veri kaynağı oluşturmayı, sorgu ifadesini tanımlamayı ve sorguyu bir foreach ifadesinde yürütmeyi içerir.

class  LINQQueryExpressions 
{ 
    statik  geçersiz  Ana () 
    {

        // Veri kaynağını belirtin. 
        int []  puanları  =  yeni  int []  {  97 ,  92 ,  81 ,  60  };

        // Sorgu ifadesini tanımlayın. 
        IEnumerable < int >  scoreQuery  = 
            puanın > 80'in puanı seçtiği puanlardaki puandan ; _  _ _  
               
             

        // Sorguyu yürütün. 
        foreach  ( int  i  in  scoreQuery ) 
        { 
            Konsol . ( i + " " ) ; } } } // Çıktı: 97 92 81  
                    
    


https://msdn.microsoft.com/es-es/library/bb397676(v=vs.120).aspx

Örnekler

Temel " Merhaba dünya " örneği:

 Sistem kullanarak ;

public  class  Örnek  
{ 
    public  static  void  Main ( string []  args )  
    { 
        Konsol . WriteLine ( "Merhaba dünya" ); 
    } 
}

Toplama ve birleştirme:

 Sistem kullanarak ;

public  class  Örnek  
{ 
    public  static  void  Main ( string []  args )  
    { 
        int  x  =  10 ; 
        int  y  =  20 ; 
        konsol . WriteLine ( "Sonuç: "  +  ( x  +  y ));  // Ekrana yazdırılacak: "Sonuç: 30" 
    } 
}

Sınıfları, yöntemleri, özellikleri ve aşırı yüklemeyi kullanma:

 Sistem kullanarak ;

public  class  Araba  
{ 
    private  int  numDoors ; 
    public  int  NumPuertas  
    { 
        get  
        { 
            bunu döndür  . numDoors ; } ayarla { bunu . numDoors = değer ; // 'değer', özelliğe bir değer atadığınızda, // bu değerle çalışmak için otomatik olarak atanan bir değişkendir. } }
        
         
        
               
                                     
        
    

    public  Car ( int  numDoors )  
    { 
        bu . numDoors  =  numDoors ; 
    }

    // Aşırı yük: sınıf herhangi bir parametre belirtmeden başlatılırsa, 'numDoors', '2' değeriyle başlatılır 
    public  Car ()  :  this ( 2 )  
    { 
    } 
}

public  class  Örnek  
{ 
    public  static  void  Main ( string []  args )  
    { 
        Araba  arabası  =  yeni  Araba ();  // İkinci 
        araba yapıcısı kullanılır . NumPuertas  =  4 ; 
        konsol . WriteLine ( "Kapı sayısı: "  +  araba . NumPuertas ); // Ekrana yazdırılacak: "Kapı sayısı: 4" 
    } 
}

Paralel Vektörler veya Diziler Örneği:

Sorun 1:

5 kişinin adını ve yaşlarını yüklemeye izin veren bir program geliştirin. Tüm verilerin klavye yüklemesini yaptıktan sonra reşit olan (18 yaş ve üzeri) kişilerin isimlerini yazdırınız.

Program:

 Sistem kullanarak ; 
System.Collections.Generic kullanarak  ; System.Linq kullanarak ; System.Text kullanarak ;
 
 

ad alanı  VectorTest10 
{ 
    sınıf  VectorTest10 
    { 
        özel  dize []  adlar ; 
        private  int []  yaş ;

        public  void  Load ()  
        { 
            isimler = yeni  dize [ 5 ]; 
            yaş = yeni  int [ 5 ]; 
            for ( int  f = 0 ; f  <  isimler . Uzunluk ; f ++ )  
            { 
                Konsol . Yaz ( "Ad girin:" ); 
                isimler [ f ]= Konsol . ReadLine (); 
                konsol . Yaz ( "Yaş girin:" ); 
                dize  hattı ; 
                satır  =  Konsol . ReadLine (); 
                yaşlar [ f ]= int . Ayrıştırma ( satır );             
            } 
        }

        public  void  OlderAge ()  
        { 
            Konsol . WriteLine ( "Resmi reşit kişiler." ); 
	    for ( int  f = 0 ; f  <  isimler . Uzunluk ; f ++)  
	    { 
                if  ( yaşlar [ f ]  >=  18 )  
                { 
                    Konsol . WriteLine ( isimler [ f ]); 
                } 
	    } 
            Konsol . OkumaAnahtarı (); 
        }

        static  void  Main ( string []  args ) 
        { 
            VectorTest10  pv  =  new  VectorTest10 (); 
            p.v. _ Yük (); 
            p.v. _ YaşlıYaş (); 
        } 
    } 
}

imza :  RSRR

Özel ortak kontroller

.NET platformunun sunduğu ortak kontrollerin, geliştiricilerin farklı ihtiyaçlarını karşılamak için özelleştirilebileceği ve/veya düzenlenebileceği unutulmamalıdır. İşlevsel ve görsel görünümü üzerinde tam kontrole sahip olduğunuz bir bileşen yapmak istediğinizde, özel bir kontrol oluşturma kararı verilir; geliştirme için gereksiz işlevleri yüklememe olasılığı ile.

Bu özelliklerin sıklıkla kullanıldığı yaygın durumlar şunlardır:

  • Sınırlı işlevselliğe sahip basit kontroller (hareket eklenmiş bir düğme gibi).
  • Geliştirme için gereksiz özelliklerin olduğu yerleri kontrol eder (kenar boşlukları olmayan bir düğme).
  • Farklı bir düzende aynı işlevselliğin nerede gerekli olduğunu kontrol eder (bir kenarı temsil etmek için çizgi biçimindeki düğmeler).

Derleyiciler ve IDE'ler

Şu anda C# dili için aşağıdaki derleyiciler veya IDE'ler bulunmaktadır:

Dil tasarım hedefleri

ECMA-334 standardı, C# için aşağıdaki tasarım hedeflerini listeler:

  • Basit, modern, genel amaçlı nesne yönelimli programlama dili.
  • Katı veri tipi kontrolü, vektör sınırları kontrolü, başlatılmamış değişkenleri kullanma girişimlerinin tespiti ve otomatik çöp toplama gibi yazılım mühendisliği ilkelerinin dahil edilmesi .
  • Dağıtık ortamlarda kullanılabilecek yazılım bileşenleri geliştirebilme .
  • Kaynak kodun taşınabilirliği.
  • Özellikle C, C++ ve Java'ya aşina olan programcılar için yeni dile kolay programcı geçişi.
  • Uluslararasılaşma için destek .
  • Her boyutta uygulama yazmak için uygundur: işletim sistemleri gibi en büyük ve en karmaşıktan en küçük işlevlere kadar.
  • Bellek ve işleme açısından ekonomik uygulamalar.

Referanslar

  1. "Neden C+ yerine C++ deniyordu?" . İngilizce . 10 Şubat 2015 . 12 Haziran 2019'da alındı . 
  2. Visual C# Developer Center, Visual C# .NET 2003 Hakkında Sıkça Sorulan Sorular

Dış bağlantılar

İspanyolca

İngilizce