Common Type System (CTS)
Bir "assembly" içerisinde birçok bağımsız değişken türü bulunabilir. .NET dünyasında "tür" kelimesi, geniş kapsamda {class, structure, interface, enumeration, delegate} kümesine ait olan herhangi bir elemana hitap etmek için kullanılır. CTS, turlerin CLR'a uygun bir şekilde çalışabilmeşi için kullanılan resmi bir açıklamadır. CTS'in tam olarak nasıl çalıştığını bilmesi gereken kişiler aslında .NET platformu üzerinde çalışmak üzere araçlar veya derleyiciler geliştirmek isteyen kişilerdir. Yine de .NET üzerinde yazılım yapmak isteyen herkesin, tercih ettikleri yazılım dili içerisinde türlerin nasıl oluştuklarını bilmelerinde fayda vardır. Kisaca bunlari bir gözden geçirelim.
CLS Class Türleri
Tüm .NET yazılım dilleri class kavramını desteklemektedir. Class'lar (sınıflar) nesne yönelimli yazılımın esasını oluşturmaktadırlar. Bir sınıf, herhangi sayıda degişik elemanlardan oluşabilir (property, method, event ve field'ler). Kısaca sınıfların nasıl oluşturulduğuna bakacak olursak, bunu C# dilinde aşağıdaki gibi yaparız.
NOT: Sınıflardan çok daha detaylı bir şekilde değişik makalelerde bahsetmeye devam edeceğiz.
CTS Structure Türleri
Structure kavramı da CTS içerisinde resmileştirilmiş bir başka kavramdır. Daha önce C'de yazılım yapmışsanız, structure turlerinin .NET dünyasında da bulunduğunu duymaktan mutluluk duyacaksınızdır (arka planda biraz daha değişik çalışıyor olsalar da). Basit anlamda, structure türleri class türlerinin biraz daha hafif siklet versiyonu olduğu düşünülebilir. Değer tabanlı bir semantik'e sahip olmakla beraber, geometrik ve matematiksel veriler üzerinde kullanmak için ideal bir formata sahiptirler. C# yazılım dilinde aşağıdaki bir struct oluşturmak için aşağidakileri yazmanız yeterlidir.
CTS Interface Türleri
Interface'ler aslında birer soyut eleman kümeleridir. COM'un tam tersine .NET'te interface'ler ortak ve temel bir başka interface olan IUnknown'dan türemezler. C# yazılım dilinde interface türleri aşağıdaki gibi oluşturulurlar.
NOT: içerisinde bulunan elemanların bu türden miras alan sınıf tarafından ikmal edilmesi gerekmektedir.
CTS Enumeration Türleri
Emumeration turleri, isim-değer çiftelirini gruplamak için kullanilabilecek yararlı yazılım yapılarıdır. örneğin değişik illerin telefon kodlarını tutacak bir yazılıma ihtiyacınız olduğunu farzedelim. Bunu yapmak için aşağıdaki gibi bir yapı kullandığınız takdirde, kullanımı çok daha kolay bir yapı elde etmiş olursunuz.
Bu değişkenler 32-bit integer değeri olarak oluşturulurlar, lakin bu hafıza boyutunu değiştirmek mümkündür ( özellikle PDA için yazılım yaparken bu boyutu azaltmak gerekecektir).
CTS Delegate Türleri
Delegate'ler C'deki fonksiyon pointerlerinin .NET dünyasındaki, kullanımı daha güvenli, bir dengidir. Aralarındaki fark ise, delegate'lerin kaba bir hafıza adresine işaret eden birer pointer olmaktansa System.MulticastDelegate sınıfından türeyen birer sınıf olmalarıdır. C#'ta delegate'ler aşağıdaki gibi oluşturulurlar.
ileride göreceğiniz gibi delegeler, multicasting ve asenkron olarak metotları çağırmakta kullanılan yararlı yapılardır.
Temel CTS Türleri
Her yazılım dilinin değişkenler oluşturmak için kendine özgü anahtar kelimeleri olsa da temelde bu değiskenler mscorlib.dll içerisinde çözüldüğü için aslında aynı sonuca erişirler. Aşağıdaki tablo içerisinde temel türler bulunmaktadır.
CTS Data Type VB .NET Keyword C# Keyword Managed Extensions for C++ Keyword System.Byte Byte byte unsigned char System.Sbyte SByte sbyte signed char System.Int16 Short short short System.Int32 Integer int int or long System.Int64 Long long __int64 System.UInt16 UShort ushort unsigned short System.UInt32 UInteger uint unsigned int or unsigned long System.UInt64 ULong ulong unsigned __int64 System.Single Single float Float System.Double Double double Double System.Object Object object Object^ System.Char Char char wchar_t System.String String string String^ System.Decimal Decimal decimal Decimal System.Boolean Boolean bool Bool
Bir "assembly" içerisinde birçok bağımsız değişken türü bulunabilir. .NET dünyasında "tür" kelimesi, geniş kapsamda {class, structure, interface, enumeration, delegate} kümesine ait olan herhangi bir elemana hitap etmek için kullanılır. CTS, turlerin CLR'a uygun bir şekilde çalışabilmeşi için kullanılan resmi bir açıklamadır. CTS'in tam olarak nasıl çalıştığını bilmesi gereken kişiler aslında .NET platformu üzerinde çalışmak üzere araçlar veya derleyiciler geliştirmek isteyen kişilerdir. Yine de .NET üzerinde yazılım yapmak isteyen herkesin, tercih ettikleri yazılım dili içerisinde türlerin nasıl oluştuklarını bilmelerinde fayda vardır. Kisaca bunlari bir gözden geçirelim.
CLS Class Türleri
Tüm .NET yazılım dilleri class kavramını desteklemektedir. Class'lar (sınıflar) nesne yönelimli yazılımın esasını oluşturmaktadırlar. Bir sınıf, herhangi sayıda degişik elemanlardan oluşabilir (property, method, event ve field'ler). Kısaca sınıfların nasıl oluşturulduğuna bakacak olursak, bunu C# dilinde aşağıdaki gibi yaparız.
Kod:
public class hesapMakinesi
{
public int Topla(int a, int b)
{
return (a + b);
}
} [FONT=Tahoma]
[/FONT]
NOT: Sınıflardan çok daha detaylı bir şekilde değişik makalelerde bahsetmeye devam edeceğiz.
CTS Structure Türleri
Structure kavramı da CTS içerisinde resmileştirilmiş bir başka kavramdır. Daha önce C'de yazılım yapmışsanız, structure turlerinin .NET dünyasında da bulunduğunu duymaktan mutluluk duyacaksınızdır (arka planda biraz daha değişik çalışıyor olsalar da). Basit anlamda, structure türleri class türlerinin biraz daha hafif siklet versiyonu olduğu düşünülebilir. Değer tabanlı bir semantik'e sahip olmakla beraber, geometrik ve matematiksel veriler üzerinde kullanmak için ideal bir formata sahiptirler. C# yazılım dilinde aşağıdaki bir struct oluşturmak için aşağidakileri yazmanız yeterlidir.
Kod:
struct Point
{
public int x, y;
public **** Yazdir()
{
Console.WriteLine("({0}, {1})" , x, y);
}
} [FONT=Tahoma]
[/FONT]
CTS Interface Türleri
Interface'ler aslında birer soyut eleman kümeleridir. COM'un tam tersine .NET'te interface'ler ortak ve temel bir başka interface olan IUnknown'dan türemezler. C# yazılım dilinde interface türleri aşağıdaki gibi oluşturulurlar.
Kod:
public interface ICizim
{
**** Ciz();
} [FONT=Tahoma]
[/FONT]
NOT: içerisinde bulunan elemanların bu türden miras alan sınıf tarafından ikmal edilmesi gerekmektedir.
CTS Enumeration Türleri
Emumeration turleri, isim-değer çiftelirini gruplamak için kullanilabilecek yararlı yazılım yapılarıdır. örneğin değişik illerin telefon kodlarını tutacak bir yazılıma ihtiyacınız olduğunu farzedelim. Bunu yapmak için aşağıdaki gibi bir yapı kullandığınız takdirde, kullanımı çok daha kolay bir yapı elde etmiş olursunuz.
Kod:
public enum Kodlar
{
Bursa = 224;
Istanbul = 216;
}
Bu değişkenler 32-bit integer değeri olarak oluşturulurlar, lakin bu hafıza boyutunu değiştirmek mümkündür ( özellikle PDA için yazılım yaparken bu boyutu azaltmak gerekecektir).
CTS Delegate Türleri
Delegate'ler C'deki fonksiyon pointerlerinin .NET dünyasındaki, kullanımı daha güvenli, bir dengidir. Aralarındaki fark ise, delegate'lerin kaba bir hafıza adresine işaret eden birer pointer olmaktansa System.MulticastDelegate sınıfından türeyen birer sınıf olmalarıdır. C#'ta delegate'ler aşağıdaki gibi oluşturulurlar.
Kod:
public delegate int Secenek(int x, int y); [FONT=Tahoma]
[/FONT]
ileride göreceğiniz gibi delegeler, multicasting ve asenkron olarak metotları çağırmakta kullanılan yararlı yapılardır.
Temel CTS Türleri
Her yazılım dilinin değişkenler oluşturmak için kendine özgü anahtar kelimeleri olsa da temelde bu değiskenler mscorlib.dll içerisinde çözüldüğü için aslında aynı sonuca erişirler. Aşağıdaki tablo içerisinde temel türler bulunmaktadır.
CTS Data Type VB .NET Keyword C# Keyword Managed Extensions for C++ Keyword System.Byte Byte byte unsigned char System.Sbyte SByte sbyte signed char System.Int16 Short short short System.Int32 Integer int int or long System.Int64 Long long __int64 System.UInt16 UShort ushort unsigned short System.UInt32 UInteger uint unsigned int or unsigned long System.UInt64 ULong ulong unsigned __int64 System.Single Single float Float System.Double Double double Double System.Object Object object Object^ System.Char Char char wchar_t System.String String string String^ System.Decimal Decimal decimal Decimal System.Boolean Boolean bool Bool
