IRCRehberi.Net- Türkiyenin En iyi IRC ve Genel Forum Sitesi  
 sohbet
derya sohbet


Programlama C , C# , C++ , Java , Python , Php , Javascript , Matlab Örnekleri

 
 
Seçenekler Stil
Alt 21 Temmuz 2021, 03:16   #1
Standart C# tür sistemi

C# türü kesin olarak doğru olan bir dildir. Her değişken ve sabit, bir değer olarak değerlendirilen her ifadede olduğu gibi bir türe sahip olur.

Her yöntem bildirimi, her giriş parametresi ve dönüş değeri için bir ad, parametre sayısı ve tür ve tür (değer, başvuru veya çıkış) belirtir. .NET sınıf kitaplığı; dosya sistemi, ağ bağlantıları, koleksiyonlar ve nesne dizileri ve tarihler gibi çok çeşitli mantıksal yapıları temsil eden yerleşik sayısal türler ve daha karmaşık türler tanımlar.

Tipik bir C# programı, sınıf kitaplığından türleri ve programın sorun etki alanına özgü kavramları modelleten kullanıcı tanımlı türleri kullanır.

Bir tür içinde depolanan bilgiler aşağıdaki öğeleri içerebilir:
  • Türünde bir değişkenin gerektirdiği depolama alanı.
  • Temsil etmek için en büyük ve en düşük değerler.
  • Içerdiği üyeler (yöntemler, alanlar, olaylar ve diğer).
  • Devralınan temel tür.
  • Uygulayan arabirimler.
  • İzin verilen işlem türleri.

Derleyici, kodunda gerçekleştirilen tüm işlemlerin tür güvenli olduğundan emin olmak için tür bilgilerini kullanır. Örneğin, türünde bir değişken bildirirsiniz, derleyici toplama ve çıkarma int işlemleri içinde değişkeni kullanmana olanak sağlar. Türünde bir değişkende aynı işlemleri gerçekleştirmeye çalışsanız, derleyici aşağıdaki örnekte gösterildiği bool gibi bir hata üretir:

PHP- Kodu

int a 5;
int b 2//OK

bool test true;

// Error. Operator '+' cannot be applied to operands of type 'int' and 'bool'.
int c test

Not

C ve C++ geliştiricileri, C# içinde'nin 'ye dönüştürülebilir bool olmadığını fark int edin.

Derleyici, tür bilgilerini yürütülebilir dosyaya meta veri olarak karıştırır. Ortak dil çalışma zamanı (CLR), bellek ayırdığı ve geri kazanır daha fazla güvence altına almak için çalışma zamanında bu meta verileri kullanır.

Değişken bildirimlerinde türleri belirtme

Bir programda bir değişken veya sabit belirttiğinizde, türünü belirtmeniz veya var derleyicinin türü saymasına izin vermek için anahtar sözcüğünü kullanmanız gerekir. Aşağıdaki örnek, hem yerleşik sayısal türler hem de Kullanıcı tanımlı karmaşık türler kullanan bazı değişken bildirimlerini gösterir:

PHP- Kodu

// Declaration only:
float temperature;
string name;
MyClass myClass;

// Declaration with initializers (four examples):
char firstLetter 'C';
var 
limit 3;
int[] source = { 01234};
var 
query from item in source
            where item 
<= limit
            select item

Yöntem parametrelerinin türleri ve dönüş değerleri yöntem bildiriminde belirtilmiştir. Aşağıdaki imza, int giriş bağımsız değişkeni olarak bir dize ve bir dize döndüren bir yöntemi gösterir:

PHP- Kodu

public string GetName(int ID)
{
    if (
ID names.Length)
        return 
names[ID];
    else
        return 
String.Empty;
}
private 
string[] names = { "Spencer""Sally""Doug" }; 

Bir değişken bildirdikten sonra, bunu yeni bir türle yeniden bildiremezsiniz ve kendisine ait bir değer, belirtilen türle uyumlu olmayan bir değer atayamazsınız. Örneğin, bir değerini bildiremez int ve sonra Boolean değeri atayamazsınız true . Ancak, değerler başka türlere dönüştürülebilir, örneğin, yeni değişkenlere atandıklarında veya yöntem bağımsız değişkenleri olarak geçirildiğinde. Veri kaybına neden olmayan bir tür dönüştürme , derleyici tarafından otomatik olarak gerçekleştirilir. Veri kaybına neden olabilecek bir dönüştürme, kaynak kodda bir tür dönüştürme gerektirir.

Daha fazla bilgi için bkz. [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Yerleşik türler

C#, tamsayıları, kayan nokta değerlerini, Boole ifadelerini, metin karakterlerini, ondalık değerleri ve diğer veri türlerini temsil etmek için standart bir yerleşik türler kümesi sağlar. Ayrıca yerleşik string ve object türler vardır. Bu türler, herhangi bir C# programında kullanabileceğiniz şekilde kullanılabilir. Yerleşik türlerin tam listesi için bkz. [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


Özel türler

struct class interface enum record Kendi özel türlerinizi oluşturmak için ,,, ve yapılarını kullanın. .NET sınıf kitaplığı kendi uygulamalarınızda kullanabileceğiniz özel türlerin bir koleksiyonudur. Varsayılan olarak, sınıf kitaplığındaki en sık kullanılan türler, herhangi bir C# programında kullanılabilir.

Diğerleri yalnızca içinde tanımlandığı derlemeye açıkça bir proje başvurusu eklerken kullanılabilir hale geldi. Derleyici derlemeye bir başvuruya sahip olduktan sonra, kaynak kodda bu derlemede bildirilen türlerin değişkenlerini (ve sabitlerini) bildirebilirsiniz. Daha fazla bilgi için bkz. [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Ortak tür sistemi

.NET'te tür sistemi hakkında iki temel noktanın anlamak önemlidir:
  • Devralma ilkesini destekler. Türler, temel türler olarak adlandırılan diğer türlerden türetici olabilir. Türetilmiş tür, yöntemleri, özellikleri ve temel türün diğer üyelerini devralıyor (bazı kısıtlamalarla). Temel tür de başka bir türetebilirsiniz, bu durumda türetilmiş tür devralma hiyerarşisinde her iki temel türün üyeleri devralınır. (C# anahtar sözcüğü: ) gibi yerleşik sayısal türler de dahil olmak üzere tüm türler, nihai olarak tek bir temel tür olan System.Int32 int (C# anahtar System.Object sözcüğü: ) türetir. object Bu birleşik tür hiyerarşisi Ortak Tür Sistemi (CTS) olarak adlandırılan bir sistemdir. C# ile devralma hakkında daha fazla bilgi için bkz. Devralma.

  • CTS'de her tür bir değer türü veya başvuru türü olarak tanımlanır. Bu türler .NET sınıf kitaplığında tüm özel türleri ve ayrıca kendi kullanıcı tanımlı türlerinizi içerir. Anahtar sözcüğünü kullanarak tanımladığınız struct türler değer türleridir; tüm yerleşik sayısal türler structs olur. veya anahtar sözcüğünü kullanarak class tanımladığınız record türler başvuru türleridir. Başvuru türleri ve değer türleri farklı derleme zamanı kurallarına ve farklı çalışma zamanı davranışına sahip olur.


Aşağıdaki çizimde, CTS'de değer türleri ve başvuru türleri arasındaki ilişki gösterilmiştir.

C# tür sistemi

Sınıflar ve yapılar, .NET 'teki ortak tür sisteminin temel yapılarıdır. C# 9, bir tür sınıf olan kayıtları ekler. Her biri, mantıksal birim olarak birbirine ait bir veri kümesini ve davranışları kapsülleyen bir veri yapısıdır. Veri ve davranışlar, sınıf, yapı veya kaydın üyeleridir ve bu makalede daha sonra listelendiği gibi yöntemleri, özellikleri, olayları vb. içerirler.

Bir sınıf, yapı veya kayıt bildirimi, çalışma zamanında örnek veya nesne oluşturmak için kullanılan bir şema gibidir. Adlı bir sınıf, yapı veya kayıt tanımlarsanız Person , Person türünün adıdır. Türünde bir değişken bildirirseniz ve başladıysanız bir p Person p nesne veya örneği olarak ifade edilir Person . Aynı türde birden çok örnek Person oluşturulabilir ve her bir örnek, özelliklerinde ve alanlarında farklı değerlere sahip olabilir.

Bir sınıf veya kayıt bir başvuru türüdür. Türün bir nesnesi oluşturulduğunda, nesnenin atandığı değişken yalnızca o belleğe yönelik bir başvuru barındırır. Nesne başvurusu yeni bir değişkene atandığında, yeni değişken özgün nesneye başvurur. Her ikisi de aynı verilere başvurduğundan, bir değişken aracılığıyla yapılan değişiklikler diğer değişkene yansıtılır.

Struct bir değer türüdür. Bir struct oluşturulduğunda, yapının atandığı değişken yapının gerçek verilerini barındırır. Yapı yeni bir değişkene atandığında, kopyalanır. Bu nedenle, yeni değişken ve özgün değişken aynı verilerin iki ayrı kopyasını içerir. Bir kopyada yapılan değişiklikler diğer kopyayı etkilemez.

Genel olarak, sınıflar daha karmaşık davranışı modellemek veya bir sınıf nesnesi oluşturulduktan sonra değiştirilmesi amaçlanan veriler için kullanılır. Yapılar, öncelikle yapı oluşturulduktan sonra değiştirilmesi amaçlanan verileri içeren küçük veri yapıları için idealdir. Kayıt türleri, nesne oluşturulduktan sonra değiştirilmek üzere amaçlanan öncelikli verileri içeren daha büyük veri yapılarının kullanımına yöneliktir.

Değer türleri

Değer türleri, 'den System.ValueType türetildi. System.Object türetki türleri System.ValueType CLR'de özel davranışa sahip. Değer türü değişkenleri doğrudan değerlerini içerir; başka bir anlama gelir; bu da değişkenin bildir olduğu bağlam içinde bellek satır içinde ayrılır. Değer türü değişkenleri için ayrı yığın ayırma veya çöp toplama yükü yoktur.

İki değer türü kategorisi vardır: struct ve enum .

Yerleşik sayısal türler yapıdır ve erişebilirsiniz alanları ve yöntemleri vardır:

PHP- Kodu

// constant field on type byte.
byte b byte.MaxValue

Ancak, değerleri basit toplama olmayan türler gibi bildirebilirsiniz ve onlara atarsınız:

PHP- Kodu

byte num 0xA;
int i 5;
char c 'Z'

Değer türleri korumalıdır; başka bir nedenle herhangi bir değer türünden türeyyetmezsiniz, örneğin System.Int32 . Kullanıcı tanımlı bir sınıftan veya yapıdan devralınması için bir yapı tanım yapılandıramaz çünkü bir yapı yalnızca 'den System.ValueType devralabilir. Ancak, bir yapı bir veya daha fazla arabirim gerçekleştirebilirsiniz. Bir yapı türünü uygulayan herhangi bir arabirim türüne atabilirsiniz; Bu tür tür oluşturma işlemi, bir kutulama işlemi tarafından yönetilen yığında bir başvuru türü nesnesinin içinde yapının sarmalamasına neden olur. Kutulama işlemleri, bir değer türünü giriş parametresi olarak veya herhangi bir arabirim türünü System.Object alan bir yönteme iletirsiniz. Daha fazla bilgi için, bkz. Boxing ve Unboxing.

Kendi özel değer türlerinizi oluşturmak için struct anahtar sözcüğünü kullanırsınız. Genellikle bir yapı, aşağıdaki örnekte gösterildiği gibi küçük bir dizi ilgili değişken için kapsayıcı olarak kullanılır:

PHP- Kodu

public struct Coords
{
    public 
int xy;

    public 
Coords(int p1int p2)
    {
        
p1;
        
p2;
    }

Değer türlerinin diğer kategorisi enum olur. Sabit sabitleri adlandırılmış tamsayı sabitleri kümesi tanımlar. Örneğin, System.IO.FileMode .NET sınıf kitaplığındaki sabit listesi, bir dosyanın nasıl açılacağını belirten adlandırılmış sabit tamsayılar kümesi içerir. Aşağıdaki örnekte gösterildiği gibi tanımlanmıştır:

PHP- Kodu

public enum FileMode
{
    
CreateNew 1,
    
Create 2,
    
Open 3,
    
OpenOrCreate 4,
    
Truncate 5,
    
Append 6,

System.IO.FileMode.CreateSabitin değeri 2 ' dir. Ancak, ad, kaynak kodu okuyan insanlar için çok daha anlamlı olur ve bu nedenle sabit değişmez sayılar yerine Numaralandırmaların kullanılması daha iyidir.

Tüm numaralandırmalar öğesinden System.Enum devralan öğesinden devralır System.ValueType . Yapılar için uygulanan tüm kurallar, numaralandırmalar için de geçerlidir.

Başvuru türleri

,,, class record delegate Dizisi veya bir interface başvuru türü olarak tanımlanan bir tür. Çalışma zamanında, bir başvuru türü değişkeni bildirdiğinizde, null işlecini kullanarak açıkça bir nesne oluşturana new veya onu new Aşağıdaki örnekte gösterildiği gibi kullanılarak başka bir yerde oluşturulmuş bir nesne atayarak değişken değeri içerir:

PHP- Kodu

MyClass mc = new MyClass();
MyClass mc2 mc

Bir arabirim, kendisini uygulayan bir sınıf nesnesiyle birlikte başlatılmalıdır. MyClass Uygularsa IMyInterface , IMyInterface Aşağıdaki örnekte gösterildiği gibi bir örneği oluşturursunuz:

PHP- Kodu

IMyInterface iface = new MyClass(); 

Nesne oluşturulduğunda, bellek yönetilen yığında ayrılır ve değişken yalnızca nesnenin konumuna bir başvuru içerir. Yönetilen yığında bulunan türler, her ikisi de ayrıldıklarında ve çöp toplama olarak bilinen clr 'nin otomatik bellek yönetimi işlevselliği tarafından geri kazanıyorsa ek yük gerektirir. Ancak çöp toplama da yüksek oranda iyileştirilmiştir ve çoğu senaryoda bir performans sorunu oluşturmaz.

Tüm diziler, öğeleri değer türleri olsa bile başvuru türlerdir. Diziler sınıfından dolaylı olarak türetilir System.Array , ancak aşağıdaki örnekte gösterildiği gibi bunları C# tarafından verilen Basitleştirilmiş sözdizimi ile bildirir ve kullanabilirsiniz:

PHP- Kodu

// Declare and initialize an array of integers.
int[] nums = { 1234};

// Access an instance property of System.Array.
int len nums.Length

Başvuru türleri devralmayı tamamen destekler. Bir sınıf oluşturduktan sonra, korumalı olarak tanımlanmamış başka bir arabirimden veya sınıftan devralabilir ve diğer sınıflar sınıfınızı devralabilir ve sanal yöntemlerinizi geçersiz kalabilirsiniz.

Değişmez değer türleri

C# içinde değişmez değerler derleyiciden bir tür alır. Sayinin sonuna bir harf ekerek sayısal değişmez değerin nasıl yaz olacağını belirtsiniz. Örneğin, değerin bir olarak kabul edilmelidir belirtmek 4.56 float için, sayanın arkasına bir "f" veya "F" ekler: 4.56f . Hiçbir harf ekli ise, derleyici sabit için bir tür çıkar.

Değişmezler yazıldıklarından ve tüm türler sonunda 'den türetildiklerinden, aşağıdaki kod gibi System.Object bir kod yazıp derleyebilirsiniz:

PHP- Kodu

string s "The answer is " 5.ToString();
// Outputs: "The answer is 5"
Console.WriteLine(s);

Type type 12345.GetType();
// Outputs: "System.Int32"
Console.WriteLine(type); 

Genel türler

Tür, istemci kodunun türün bir örneğini oluşturduğunda belirtecek gerçek tür (somut tür) için yer tutucu olarak hizmet eden bir veya daha fazla tür parametresiyle bildirebilirsiniz. Bu türler genel türler olarak adlandırılan türlerdir.

Örneğin, .NET türünün System.Collections.Generic.List<T> kurala göre adı verilen bir tür parametresi T vardır. Türünün bir örneğini ekleyebilirsiniz, listede yer alan nesnelerin türünü belirtirsiniz, string örneğin:

PHP- Kodu

List<stringstringList = new List<string>();
stringList.Add("String example");
// compile time error adding a type other than a string:
stringList.Add(4); 

tür parametresinin kullanılması, her bir öğeyi nesnesine dönüştürmek zorunda kalmadan aynı sınıfı herhangi bir öğe türünü tutmak üzere yeniden kullanmayı mümkün yapar. Derleyici koleksiyonun öğelerinin belirli türünü bildiği ve örneğin, önceki örnekte nesnesine bir tamsayı eklemeye çalışmanıza bağlı olarak derleme zamanında hataya neden olduğundan, genel koleksiyon sınıfları kesin olarak türü kesin olarak belirtilen koleksiyonlar olarak stringList çağrılır.

Örtük türler, anonim türler ve null yapılabilir değer türleri

Anahtar sözcüğünü kullanarak yerel bir değişkeni (sınıf üyelerini değil,) örtük olarak yazabilirsiniz var . Değişken hala derleme zamanında bir tür alır, ancak tür derleyici tarafından sağlanır.

Metot sınırlarını depolamayı veya dışına geçirmemenizi istemediğiniz ilgili değerlerin basit kümeleri için adlandırılmış bir tür oluşturmak kullanışlı olabilir. Bu amaçla anonim türler oluşturabilirsiniz.

Sıradan değer türlerinin değeri olamaz null . Ancak, türden sonra bir ekleyerek null olabilen değer türleri oluşturabilirsiniz ? .

Örneğin, int? int değerine sahip bir tür de olabilir null . Null yapılabilir değer türleri, genel yapı türünün örnekleridir System.Nullable<T> . Null olabilen değer türleri, genellikle sayısal değerlerin olabileceği veritabanlarına ve veritabanlarından veri geçirirken faydalıdır null .

Derleme zamanı türü ve çalışma zamanı türü

Bir değişken farklı derleme zamanı ve çalışma zamanı türlerine sahip olabilir. Derleme zamanı türü , kaynak koddaki değişkenin bildirildiği veya Çıkarsanan türüdür. Çalışma zamanı türü , bu değişken tarafından başvurulan örneğin türüdür. Genellikle, bu iki tür aşağıdaki örnekte olduğu gibi aynıdır:

PHP- Kodu

string message "This is a string of characters"


Diğer durumlarda, aşağıdaki iki örnekte gösterildiği gibi, derleme zamanı türü farklıdır:


PHP- Kodu

object anotherMessage "This is another string of characters";
IEnumerable<charsomeCharacters "abcdefghijklmnopqrstuvwxyz"

Yukarıdaki örneklerin her ikisinde de çalışma zamanı türü bir string 'dır. Derleme zamanı türü ilk object satırda ve IEnumerable<char> ikinci satırdadır.

İki tür bir değişken için farklı ise, derleme zamanı türü ve çalışma zamanı türünün ne zaman geçerli olduğunu anlamak önemlidir. Derleme zamanı türü, derleyici tarafından alınan tüm eylemleri belirler.

Bu derleyici eylemleri yöntem çağrısı çözümlemesi, aşırı yükleme çözümlemesi ve kullanılabilir örtülü ve açık türler içerir. Çalışma zamanı türü, çalışma zamanında çözümlenen tüm eylemleri belirler. Bu çalışma zamanı eylemleri sanal yöntem çağrılarını gönderme, değerlendirme ve is switch ifadeleri ve diğer tür test API'lerini içerir. Kodunuzun türlerle nasıl etkileşim kurdığını daha iyi anlamak için, hangi eylemin hangi türe uygulandığını tanıyın.

Alıntı:
BillWagner
________________

06/02/2023 İnsan olan herkesin kalbi acıdı.
 


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı





Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 15:34.