Ortak tür sistemi
Ortak tür sistemi, türlerin ortak dil çalışma zamanında nasıl bildiril, kullanılır ve yönetil olduğunu tanımlar ve ayrıca çalışma zamanının diller arası tümleştirme desteğinin önemli bir parçasıdır. Ortak tür sistemi aşağıdaki işlevleri gerçekleştirir:
Diller arası tümleştirme, tür güvenliği ve yüksek performanslı kod yürütmeyi etkinleştirmeye yardımcı olan bir çerçeve sağlar.
Birçok programlama dilinin tam uygulamasını destekleyen nesne odaklı bir model sağlar.
Dillerin uyması gereken kuralları tanımlar. Bu kurallar, farklı dillerde yazılan nesnelerin birbiriyle etkileşim kurması için yardımcı olur.
Uygulama geliştirmede kullanılan temel veri türlerini Boolean Byte (örneğin, , , , Char ve ) içeren bir kitaplık Int32 UInt64 sağlar.
.NET'te türler
.NET'te tüm türler değer türleri veya başvuru türleridir.
Değer türleri, nesneleri nesnenin gerçek değeriyle temsil edilen veri türleridir. Bir değişkene değer türünün bir örneği atanırsa, bu değişkene değerin yeni bir kopyası verilir.
Başvuru türleri, nesneleri nesnenin gerçek değerine bir başvuru (işaretçiye benzer) ile temsil edilen veri türleridir. Bir değişkene bir başvuru türü atanırsa, bu değişken özgün değere başvurur (bunu gösterir). Kopya yok.
.NET'te ortak tür sistemi aşağıdaki beş tür kategorilerini destekler:
Sınıflar
Sınıf, doğrudan başka bir sınıftan türetilen ve 'den örtülü olarak türetilen bir başvuru t t System.Object türetmektedir. sınıfı, bir nesnenin (sınıfın bir örneği olan) gerçekleştire işlemler (yöntemler, olaylar veya özellikler) ve nesnenin içerdiği verileri (alanlar) tanımlar. Bir sınıf genellikle hem tanım hem de uygulama içerir (örneğin, uygulama olmadan yalnızca tanım içeren arabirimlerin aksine), uygulaması olmayan bir veya daha fazla üyeye sahip olabilir.
Aşağıdaki tabloda, bir sınıfın sahip olduğu bazı özellikler açık almaktadır. Çalışma zamanını destekleyen her dil, bir sınıf veya sınıf üyesinin bu özelliklerden bir veya daha fazlasının olduğunu belirtmek için bir yol sağlar. Ancak.NET'i hedef alan tek tek programlama dilleri tüm bu özellikleri kullanılabilir hale geleyene kadar kullanabilir.
| Özellik | Description |
|---|---|
| sealed | Başka bir sınıfın bu türden türetilenem olduğunu belirtir. |
| uygulamalar | Sınıfının, arabirim üyelerinin uygulamasını sağlayarak bir veya daha fazla arabirim kullandığını gösterir. |
| abstract | Sınıfın örneği açılamay olduğunu gösterir. Bunu kullanmak için bundan başka bir sınıf türetmeniz gerekir. |
| Devralır | Sınıf örneklerinin, temel sınıfın belirtilen herhangi bir yerinde kullanılagele olduğunu gösterir. Bir temel sınıftan devralan türetilmiş bir sınıf, temel sınıf tarafından sağlanan herhangi bir genel üyenin uygulamasını kullanabilir veya türetilmiş sınıf kendi uygulamasıyla ortak üyelerin uygulamasını geçersiz kabilir. |
| dışarı aktarıldı veya dışarı aktarıldı | Bir sınıfın tanımlandığı derlemenin dışında görünür olup olmadığını gösterir. Bu özellik yalnızca üst düzey sınıflar için geçerlidir ve iç içe geçmiş sınıflar için geçerli değildir. |
Not
Bir sınıf, üst sınıf veya yapıda da iç içe geçmiş olabilir. İç içe geçmiş sınıflar da üye özelliklerine sahiptir. Daha fazla bilgi için bkz. İç İçe Geçmiş Türler.
Uygulamasız sınıf üyeleri soyut üyelerdir. Bir veya daha fazla soyut üyeye sahip bir sınıf soyuttur; yeni örnekleri oluşturulamaz. Çalışma zamanını hedef alan bazı diller, üyelerinden hiçbiri soyut olsa bile bir sınıfı soyut olarak işaretlemenize izin sağlar. Türetilen sınıfların uygun olduğunda devralınabilir veya geçersiz kılabilirsiniz temel bir işlev kümesi kapsüllemek istediğiniz zaman soyut bir sınıf kullanabilirsiniz. Soyut olan sınıflar somut sınıflar olarak adlandırılır.
Bir sınıf herhangi bir sayıda arabirim uygulayabilir, ancak tüm sınıfların örtülü olarak devralınmalarına ek olarak yalnızca bir temel sınıftan System.Object devralabilir. Tüm sınıfların, sınıfın yeni örneklerini başlatan en az bir oluşturucusu olması gerekir. Açıkça bir oluşturucu tanımlamazsanız, çoğu derleyici otomatik olarak parametresiz bir oluşturucu sağlar.
Yapılar
Yapı, türünden örtülü olarak türetilen ve türünden System.ValueType türetilen bir değer t System.Object değeridir. Yapı, bellek gereksinimleri küçük olan değerleri temsil etmek ve değerleri kesin olarak türü kesin olarak belirtilen parametrelere by-value parametreleri olarak geçirme için kullanışlıdır. .NET'te tüm temel veri türleri ( , , , , , , , , , ve Boolean ) yapı Byte Char DateTime olarak Decimal Double Int16 Int32 Int64 SByte Single UInt16 UInt32 UInt64 tanımlanır.
Sınıflar gibi yapılar da verileri (yapının alanları) ve bu veriler üzerinde gerçekleştirilecek işlemleri (yapının yöntemleri) tanımlar. Bu, ve sınıflarında tanımlanan sanal yöntemler ve değer türü üzerinde tanımlanan tüm yöntemler de dahil olmak üzere yapılar üzerinde yöntemler System.Object System.ValueType çağırabilirsiniz. Başka bir deyişle, yapılar alanlar, özellikler ve olaylara, statik ve statik olmayan yöntemlere sahip olabilir. Yapı örnekleri oluşturabilir, bunları parametre olarak iletir, yerel değişken olarak depolar veya başka bir değer türünde ya da başvuru türünde bir alanda depolar. Yapılar ayrıca arabirimler de uygulamalı.
Değer türleri de çeşitli bakımlardan sınıflardan farklıdır. İlk olarak, 'den örtülü olarak devralsalar System.ValueType da, herhangi bir türden doğrudan devralamaz. Benzer şekilde, tüm değer türleri korumalıdır; başka bir tür bunlardan türetilenem edilemez. Ayrıca oluşturucular gerektirmez.
Her değer türü için ortak dil çalışma zamanı, değer türüyle aynı durum ve davranışa sahip bir sınıf olan karşılık gelen bir kutusal tür sağlar. Bir değer türünün örneği, türünde bir parametre kabul eden bir yönteme geçir kullanıldığında kutu System.Object içindedir. Denetim, bir değer türünü bir by-reference parametresi olarak kabul eden bir yöntem çağrısından döndür geldiğinde kutulanmamıştır (yani, bir sınıfın örneğinden bir değer türünün örneğine geri dönüştürülür). Bazı diller, kutu türü gerekli olduğunda özel söz dizimi kullanmalarını gerektirir; diğerlerinde ise gerektiğinde kutuyla kutu türü otomatik olarak ılır. Bir değer türü tanımladığınız zaman hem kutulanmamış hem de kutulanmamış türü tanımlarsiniz.
Listelemeler
Bir numaralama, doğrudan kaynağından devralınan ve temel alınan ilkel türün değerleri için System.Enum alternatif adlar sağlar bir değer t t tür. Bir numaralama türünün bir adı, yerleşik olarak imzalanmış veya imzasız tamsayı türlerinden biri olması gereken temel bir tür (, , veya gibi) ve bir alan Byte Int32 kümesi UInt64 vardır. Alanlar statik sabit alanlardır ve her biri bir sabiti temsil eder. Aynı değer birden çok alan için atanabilir. Bu durum oluştuğunda, değerlerden birini yansıma ve dize dönüştürme için birincil numaralama değeri olarak işaretlemelisiniz.
Temel alınan türün bir değerini bir numaralama (veya tam tersi) atabilirsiniz (çalışma zamanı için tür değiştirme gerekmez). Bir numaralama örneği oluşturabilir ve hem yöntemlerini hem de numaralamanın temel alınan türünde tanımlanan System.Enum yöntemleri çağırebilirsiniz. Ancak, temel alınan türün bir örneği gerekli olduğunda (veya tam tersi) bazı diller bir numaralama parametresi olarak geçişe izin vermeyebilirsiniz.
Aşağıdaki ek kısıtlamalar, numaralamalar için geçerlidir:
Kendi yöntemlerini tanımlayarak tanımlamazlar.
Arabirimleri uygulayamaz.
Özellikleri veya olayları tanımlayarak tanımlamazlar.
Yalnızca genel tür içinde iç içe geçmiş olduğundan genel olmadıkça genel olamazlar. Başka bir ifadeyle, bir numaralamanın kendi tür parametreleri olamaz.
Not
Visual Basic, C# ve C++ ile oluşturulan iç içe türler (numaralamalar dahil) kapsayan tüm genel türlerin tür parametrelerini içerir ve bu nedenle kendi tür parametrelerine sahip olmayanlar bile geneldir. Daha fazla bilgi için başvuru konusunun "İç İçe Geçmiş Türler" Type.MakeGenericType başlığına bakın.
FlagsAttributeözniteliği, bit alanı olarak adlandırılan özel bir tür numaralamayı ifade ediyor. Çalışma zamanının kendisi geleneksel numaralar ve bit alanları arasında ayrım yapmasa da, diliniz bunu yapar. Bu ayrım yapılırken bitwise işleçleri, adsız değerler oluşturmak için bit alanlarında kullanılabilir, ancak numaralandırıcılarda kullanılamaz. Numara listeleri genellikle haftanın günleri, ülke veya bölge adları gibi benzersiz öğelerin listesi için kullanılır. Bit alanları genellikle, gibi bir arada ortaya çıkabilir kalite veya miktar listeleri için Red And Big And Fast kullanılır.
Aşağıdaki örnekte, hem bit alanlarının hem de geleneksel numaralar kullanmanın nasıl olduğu gösterir.
using System;
using System.Collections.Generic;
// A traditional enumeration of some root vegetables.
public enum SomeRootVegetables
{
HorseRadish,
Radish,
Turnip
}
// A bit field or flag enumeration of harvesting seasons.
[Flags]
public enum Seasons
{
None = 0,
Summer = 1,
Autumn = 2,
Winter = 4,
Spring = 8,
All = Summer | Autumn | Winter | Spring
}
public class Example
{
public static void Main()
{
// Hash table of when vegetables are available.
Dictionary<SomeRootVegetables, Seasons> AvailableIn = new Dictionary<SomeRootVegetables, Seasons>();
AvailableIn[SomeRootVegetables.HorseRadish] = Seasons.All;
AvailableIn[SomeRootVegetables.Radish] = Seasons.Spring;
AvailableIn[SomeRootVegetables.Turnip] = Seasons.Spring |
Seasons.Autumn;
// Array of the seasons, using the enumeration.
Seasons[] theSeasons = new Seasons[] { Seasons.Summer, Seasons.Autumn,
Seasons.Winter, Seasons.Spring };
// Print information of what vegetables are available each season.
foreach (Seasons season in theSeasons)
{
Console.Write(String.Format(
"The following root vegetables are harvested in {0}:\n",
season.ToString("G")));
foreach (KeyValuePair<SomeRootVegetables, Seasons> item in AvailableIn)
{
// A bitwise comparison.
if (((Seasons)item.Value & season) > 0)
Console.Write(String.Format(" {0:G}\n",
(SomeRootVegetables)item.Key));
}
}
}
}
// The example displays the following output:
// The following root vegetables are harvested in Summer:
// HorseRadish
// The following root vegetables are harvested in Autumn:
// Turnip
// HorseRadish
// The following root vegetables are harvested in Winter:
// HorseRadish
// The following root vegetables are harvested in Spring:
// Turnip
// Radish
// HorseRadish
Imports System.Collections.Generic
' A traditional enumeration of some root vegetables.
Public Enum SomeRootVegetables
HorseRadish
Radish
Turnip
End Enum
' A bit field or flag enumeration of harvesting seasons.
<Flags()> Public Enum Seasons
None = 0
Summer = 1
Autumn = 2
Winter = 4
Spring = 8
All = Summer Or Autumn Or Winter Or Spring
End Enum
' Entry point.
Public Class Example
Public Shared Sub Main()
' Hash table of when vegetables are available.
Dim AvailableIn As New Dictionary(Of SomeRootVegetables, Seasons)()
AvailableIn(SomeRootVegetables.HorseRadish) = Seasons.All
AvailableIn(SomeRootVegetables.Radish) = Seasons.Spring
AvailableIn(SomeRootVegetables.Turnip) = Seasons.Spring Or _
Seasons.Autumn
' Array of the seasons, using the enumeration.
Dim theSeasons() As Seasons = {Seasons.Summer, Seasons.Autumn, _
Seasons.Winter, Seasons.Spring}
' Print information of what vegetables are available each season.
For Each season As Seasons In theSeasons
Console.WriteLine(String.Format( _
"The following root vegetables are harvested in {0}:", _
season.ToString("G")))
For Each item As KeyValuePair(Of SomeRootVegetables, Seasons) In AvailableIn
' A bitwise comparison.
If (CType(item.Value, Seasons) And season) > 0 Then
Console.WriteLine(" " + _
CType(item.Key, SomeRootVegetables).ToString("G"))
End If
Next
Next
End Sub
End Class
' The example displays the following output:
' The following root vegetables are harvested in Summer:
' HorseRadish
' The following root vegetables are harvested in Autumn:
' Turnip
' HorseRadish
' The following root vegetables are harvested in Winter:
' HorseRadish
' The following root vegetables are harvested in Spring:
' Turnip
' Radish
' HorseRadish
Arabirimler
Arabirim, "yap" ilişkisini veya "ilişkisi olan" ilişkiyi belirten bir sözleşme tanımlar. Arabirimler genellikle karşılaştırma ve sıralama (ve arabirimleri), eşitlik testi (arabirim) veya bir koleksiyondaki öğeleri (ve arabirimleri) numaralama gibi işlevleri uygulamak için IComparable IComparable<T> IEquatable<T> IEnumerable IEnumerable<T> kullanılır. Arabirimlerin özellikleri, yöntemleri ve olayları olabilir; bunların hepsi soyut üyelerdir; yani, arabirim üyelerini ve imzalarını tanımlasa da, her arabirim üyesinin işlevselliğini tanımlamak için arabirimi uygulayan türe bırakır. Bu, arabirim uygulayan herhangi bir sınıf veya yapının, arabirimde bildirilen soyut üyeler için tanımları teminması gerektiğini gösterir. Bir arabirim, bir veya daha fazla arabirim uygulamak için herhangi bir uygulama sınıfı veya yapısı da gerekli olabilir.
Arabirimler için aşağıdaki kısıtlamalar geçerlidir:
Arabirim herhangi bir erişilebilirlikle bildirebilirsiniz, ancak arabirim üyelerinin genel erişilebilirliği olması gerekir.
Arabirimler oluşturucuları tanımamaz.
Arabirimler alanları tanımamaz.
Arabirimler yalnızca örnek üyelerini tanımlayabilir. Statik üyeleri tanımlayamaz.
Birden fazla arabirim aynı imzaya sahip bir üye bildireye sahip olduğundan ve bu üyeler ayrı uygulamalara sahip olduğundan, her dil, bir uygulamanın üyeyi gerektiren arabirime eşlemesi için kurallar sağlasa gerekir.
Temsilciler
Temsilciler, C++ işlev işaretçilerine benzer bir amaca hizmet eden başvuru türleridir. .NET'te olay işleyicileri ve geri çağırma işlevleri için kullanılır. İşlev işaretçilerden farklı olarak, temsilciler güvenlidir, doğrulanabilir ve tür güvenlidir. Temsilci türü, uyumlu imzaya sahip herhangi bir örnek yöntemini veya statik yöntemi temsil ediyor olabilir.
Temsilci parametresinin türü yöntem parametresinin türünden daha kısıtlayıcı ise bir temsilcinin parametresinin ilgili parametresiyle uyumludur, çünkü bu, temsilciye geçirilen bir bağımsız değişkenin yöntemine güvenli bir şekilde geçirilebilmektedir.
Benzer şekilde, yöntemin dönüş türü temsilcinin dönüş türünden daha kısıtlayıcı ise, bir temsilcinin dönüş türü bir yöntemin dönüş türüyle uyumludur, çünkü bu yöntem dönüş değerinin temsilcinin dönüş türüne güvenli bir şekilde atılaycazı garantiler.
Örneğin, türünde bir parametreye ve dönüş türüne sahip bir temsilci, türünde bir parametresine ve türünde bir dönüş değerine sahip IEnumerable bir yöntemi temsil ediyor Object Object IEnumerable olabilir. Daha fazla bilgi ve örnek kod için bkz. Delegate.CreateDelegate(Type, Object, MethodInfo) .
Temsilcinin temsil ettiği yönteme bağlı olduğu kabul edildi. Yöntemine bağlı olmanın yanı sıra, bir temsilci bir nesnesine de bağlı olabilir. nesnesi yönteminin ilk parametresini temsil eder ve temsilci her çağrıldığında yöntemine geçirildi. yöntem bir örnek yöntemi ise, bağlı nesne örtülü parametre olarak geçir edilir ( Visual Basic); yöntem statik ise, nesne yöntemin ilk resmi parametresi olarak geçir edilir ve temsilci imzası kalan parametrelerle eşleşmesi this Me gerekir. Daha fazla bilgi ve örnek kod için bkz. System.Delegate .
Tüm temsilciler, 'den System.MulticastDelegate devralan 'den System.Delegate devralın. C#, Visual Basic ve C++ dilleri bu türlerden devralmaya izin vermez. Bunun yerine, temsilciler bildirim için anahtar sözcükler sağlar.
Temsilciler 'den devralınarak, temsilcinin temsil ettiği ve temsilci çağrıldığında yürütülen yöntemlerin listesi olan bir çağırma MulticastDelegate listesine sahip olur. Listede yer alan tüm yöntemler, temsilci çağrıldığında sağlanan bağımsız değişkenleri alır.
Not
Dönüş değeri, temsilcinin dönüş türü olsa bile, çağırma listesinde birden fazla yöntemi olan bir temsilci için tanımlanmamıştır.
Çoğu durumda, örneğin geri çağırma yöntemlerinde temsilci yalnızca bir yöntemi temsil eder ve tek eylem temsilciyi oluşturmak ve çağırmaktır.
.NET, birden çok yöntemi temsil eden temsilciler için, bir temsilcinin çağırma listesine Delegate yöntem ekleme (yöntemi), bir yöntemi kaldırma ve çağırma listesini (yöntemi) alma gibi işlemleri desteklemek için ve temsilci sınıflarının yöntemlerini MulticastDelegate Delegate.Combine Delegate.Remove Delegate.GetInvocationList sağlar.
Not
C#, C++ ve Visual Basic'da olay işleyicisi temsilcileri için bu yöntemleri kullanmak gerekli değildir çünkü bu diller olay işleyicileri eklemek ve kaldırmak için söz dizimi sağlar.
Tür tanımları
Tür tanımı şunları içerir:
Tür üzerinde tanımlanan tüm öznitelikler.
Türün erişilebilirliği (görünürlük).
Türün adı.
Türün temel türü.
Türü tarafından uygulanan tüm arabirimler.
Türün üyelerinin her biri için tanımlar.
Öznitelikler
Öznitelikler, kullanıcı tanımlı ek meta veriler sağlar. En yaygın olarak, derlemesinde bir tür hakkında ek bilgi depolamak veya tasarım zamanı ya da çalışma zamanı ortamında bir tür üyesinin davranışını değiştirmek için kullanılır.
Öznitelikler, 'den devralınan System.Attribute sınıflardır. Özniteliklerin kullanımını destekleyen dillerin her biri, bir dil öğesine öznitelik uygulamak için kendi söz dizimlerine sahip olur. Öznitelikler neredeyse tüm dil öğesine uygulanabilir; bir özniteliğin uygulananın belirli öğeleri, bu öznitelik AttributeUsageAttribute sınıfına uygulanan tarafından tanımlanır.
Tür erişilebilirliği
Tüm türlerin erişilebilirliğini diğer türlerden yöneten bir değiştiricisi vardır. Aşağıdaki tabloda, çalışma zamanı tarafından desteklenen tür erişimleri açıkmektedir.
| Erişilebilirlik | Description |
|---|---|
| public | Türe tüm derlemeler tarafından erişilebilir. |
| derleme | Türüne yalnızca derlemesi içinden erişilebilir. |
İç içe bir türün erişilebilirliği, hem üyenin bildirilen erişilebilirliği hem de hemen içeren türün erişilebilirlik etki alanı tarafından belirlenen erişilebilirlik etki alanına bağlıdır. Ancak, iç içe bir türün erişilebilirlik etki alanı, içeren türün erişilebilirlik etki alanını aşamaz.
Bir program içindeki bir türde bildirilen iç içe geçmiş üyenin erişilebilirlik etki alanı aşağıdaki gibi tanımlanır (kendisi bir M T tür P M olabilir):
bildirilen erişilebilirliği
Mpublicise, erişilebilirlik etki alanıM, erişilebilirlik etkiTalanıdır.bildirilen erişilebilirlik ise, erişilebilirlik etki alanı, erişilebilirlik etki alanının program metni ve dışında bildirilen türlerden türetilen herhangi bir tür program metni ile
Mprotected internalMTPTkesişimidir.Pbildirilen erişilebilirliği ise, erişilebilirlik etki alanı, 'nin erişilebilirlik etki alanının program metniyle ve 'den türetilen herhangi bir
MprotectedMTTtürün kesişimidir.Tbildirilen erişilebilirliği ise, erişilebilirlik etki alanı, erişilebilirlik etki alanının program metniyle
MinternalMTkesişimidir.Pbildirilen erişilebilirliği
Mprivateise, erişilebilirlik etki alanıMprogramTmetnidir.
Tür Adları
Ortak tür sistemi adlara yalnızca iki kısıtlama dayatıyor:
Tüm adlar Unicode (16 bit) karakter dizeleri olarak kodlanmış.
Adların, yerleşik (16 bit) bir değere sahip 0x0000.
Ancak çoğu dil, tür adlarından ek kısıtlamalara neden olur. Tüm karşılaştırmalar byte byte temelinde yapılır ve bu nedenle büyük/küçük harfe duyarlı ve yerel olarak bağımsızdır.
Bir tür diğer modüllerden ve derlemelerden türlere başvurulsa da, bir tür bir .NET modülü içinde tam olarak tanımlanmalıdır. (Derleyici desteğine bağlı olarak, birden çok kaynak kod dosyası içine ayrılabilir.) Tür adları yalnızca bir ad alanı içinde benzersiz olmalıdır. Bir türü tam olarak tanımlamak için tür adının, türün uygulanmasını içeren ad alanı tarafından uygun olması gerekir.
Temel türler ve arabirimler
Bir tür, değerleri ve davranışları başka bir türden devralabilir. Ortak tür sistemi türlerin birden fazla temel türden devralmasına izin vermez.
Bir tür herhangi bir sayıda arabirim gerçekleştirebilirsiniz. Bir arabirimi uygulamak için bir türün bu arabirimin tüm sanal üyelerini uygulaması gerekir. Sanal yöntem türetilmiş bir tür tarafından uygulanarak statik veya dinamik olarak çağrılabilir.
Tür üyeleri
Çalışma zamanı, türün davranışını ve durumunu belirten üyeleri tanımlamanızı sağlar. Tür üyeleri aşağıdakileri içerir:
Alanlar
Bir alan, türün durumunun bir bölümünü açıklar ve içerir. Alanlar, çalışma zamanı tarafından desteklenen herhangi bir türde olabilir. En yaygın olarak, alanlar yalnızca sınıfın içinde veya türetilmiş bir sınıftan erişilebilir olması için private protected veya olur. Bir alanın değeri türünün dışından değiştirilebilirse, genellikle bir özellik kümesi erişimcisi kullanılır. Genel kullanıma açık alanlar genellikle salt okunur olur ve iki tür olabilir:
Değeri tasarım zamanında atanan sabitler. Bunlar bir sınıfın statik üyeleridir, ancak bunlar ( in
staticSharedVisual Basic) anahtar sözcüğü kullanılarak tanımlanmamıştır.Değerleri sınıf oluşturucusu içinde atanabilir salt okunur değişkenler.
Aşağıdaki örnek, bu iki salt okunur alan kullanımını gösterir.
using System;
public class Constants
{
public const double Pi = 3.1416;
public readonly DateTime BirthDate;
public Constants(DateTime birthDate)
{
this.BirthDate = birthDate;
}
}
public class Example
{
public static void Main()
{
Constants con = new Constants(new DateTime(1974, 8, 18));
Console.Write(Constants.Pi + "\n");
Console.Write(con.BirthDate.ToString("d") + "\n");
}
}
// The example displays the following output if run on a system whose current
// culture is en-US:
// 3.1416
// 8/18/1974
Public Class Constants
Public Const Pi As Double = 3.1416
Public ReadOnly BirthDate As Date
Public Sub New(birthDate As Date)
Me.BirthDate = birthDate
End Sub
End Class
Public Module Example
Public Sub Main()
Dim con As New Constants(#8/18/1974#)
Console.WriteLine(Constants.Pi.ToString())
Console.WriteLine(con.BirthDate.ToString("d"))
End Sub
End Module
' The example displays the following output if run on a system whose current
' culture is en-US:
' 3.1416
' 8/18/1974
Özellikler
Bir özellik, bir değeri veya türün durumunu tanımlar ve özelliğin değerini almak veya ayarlama yöntemlerini tanımlar. Özellikler basit türler, temel türler koleksiyonları, Kullanıcı tanımlı türler veya Kullanıcı tanımlı türlerin koleksiyonları olabilir. Özellikler genellikle türün gerçek gösteriminden bağımsız olarak bir türün genel arabirimini tutmak için kullanılır. Bu, özelliklerin doğrudan sınıfında depolanmayan değerleri yansıtmasını sağlar (örneğin, bir özellik hesaplanan bir değer döndürdüğünde) veya değerler özel alanlara atanmadan önce doğrulama gerçekleştirir. Aşağıdaki örnek, son stili gösterir.
using System;
public class Person
{
private int m_Age;
public int Age
{
get { return m_Age; }
set {
if (value < 0 || value > 125)
{
throw new ArgumentOutOfRangeException("The value of the Age property must be between 0 and 125.");
}
else
{
m_Age = value;
}
}
}
}
Public Class Person
Private m_Age As Integer
Public Property Age As Integer
Get
Return m_Age
End Get
Set
If value < 0 Or value > 125 Then
Throw New ArgumentOutOfRangeException("The value of the Age property must be between 0 and 125.")
Else
m_Age = value
End If
End Set
End Property
End Class
Özelliğin kendisini eklemenin yanı sıra, okunabilir bir özelliği içeren bir türün Microsoft ara dili (MSIL) bir get_ PropertyName yöntemi ve yazılabilir özelliği içeren BIR tür için MSIL yöntemi bir set_ PropertyName yöntemi içerir.
Yöntemler
Bir yöntemi, türünde kullanılabilir olan işlemleri açıklar. Yöntemin imzası, tüm parametrelerinin ve dönüş değerinin izin verilen türlerini belirtir.
Çoğu Yöntem Yöntem çağrıları için gerekli parametrelerin tam sayısını tanımlasa da, bazı yöntemler değişken sayıda parametreyi destekler. Bu yöntemlerin son tanımlanmış parametresi ParamArrayAttribute özniteliğiyle işaretlenir. dil derleyicileri, genellikle gereksiz bir şekilde params kullanımını sağlayan C# ve Visual Basic gibi bir anahtar sözcük sağlar ParamArray ParamArrayAttribute .
Oluşturucular
Oluşturucu, bir sınıfın veya yapının yeni örneklerini oluşturan özel bir yöntem türüdür. Diğer tüm yöntemler gibi, bir Oluşturucu parametreleri içerebilir; Ancak, oluşturucuların dönüş değeri yoktur (yani döndürürler void ).
Bir sınıfın kaynak kodu açıkça bir Oluşturucu tanımlamıyorsa, derleyici parametresiz bir Oluşturucu içerir. ancak, bir sınıfın kaynak kodu yalnızca parametreli oluşturucular tanımlıyorsa, Visual Basic ve C# derleyicileri parametresiz bir oluşturucu oluşturmaz.
Bir yapının kaynak kodu oluşturucuları tanımlıyorsa, bunlar parametreli olmalıdır; bir yapı parametresiz bir Oluşturucu tanımlayabilir ve derleyiciler yapılar veya diğer değer türleri için parametresiz oluşturucular oluşturmaz. Tüm değer türlerinde örtük olarak parametresiz bir Oluşturucu vardır. Bu Oluşturucu ortak dil çalışma zamanı tarafından uygulanır ve yapının tüm alanlarını varsayılan değerlerine başlatır.
Ekinlikler
Bir olay, yanıtlamış olabilecek bir olayı tanımlar ve ' a abone olunmakta olan, etkinliği kaldırmak ve olayı yükseltmek için Yöntemler tanımlar. Olaylar genellikle diğer durum değişikliği türlerini bilgilendirmek için kullanılır. Daha fazla bilgi için bkz. Olaylar.
İç içe geçmiş türler
İç içe bir tür, başka bir türün üyesi olan bir türdür. İç içe türler kapsayan türlerine sıkı bir biçimde bağlanmalıdır ve genel amaçlı bir tür olarak yararlı olmamalıdır. İç içe türler, bildirim türü kullandığında ve iç içe türün örneklerini oluşturduğunda ve iç içe türün kullanılması Ortak üyelerde gösterilmediği durumlarda faydalıdır.
İç içe türler bazı geliştiricilere kafa karıştırıcı ve görünürlük açısından etkileyici bir neden olmadıkça herkese açık olmamalıdır. İyi tasarlanmış bir kitaplıkta, geliştiricilerin nesneleri başlatmak veya değişkenleri bildirmek için nadiren iç içe türler kullanması gerekir.
Üye türü özellikleri
Ortak tür sistemi, tür üyelerinin çeşitli özelliklere sahip olmasına olanak sağlar; Ancak, dillerin tüm bu özellikleri desteklemesi gerekmez. Aşağıdaki tabloda üye özellikleri açıklanmaktadır.
| Özellik | Uygulanabilir | Description |
|---|---|---|
| abstract | Yöntemler, Özellikler ve olaylar | Tür, yöntemin uygulamasını sağlamaz. Soyut yöntemleri devraldığı veya uygulayan türler, yöntemi için bir uygulama sağlamalıdır. Tek özel durum, türetilmiş türün bir soyut tür olduğu durumdur. Tüm soyut yöntemler sanal. |
| Özel, Aile, derleme, Aile ve derleme, Aile veya derleme ya da ortak | Tümü | Üyenin erişilebilirliğini tanımlar: private Yalnızca üyeyle aynı tür içinden veya iç içe yerleştirilmiş bir tür içinde erişilebilir. aile Üyeyle aynı tür içinden ve ondan kalıtımla alan türetilmiş türlerden erişilebilir. derleme Yalnızca türün tanımlandığı derlemede erişilebilir. Aile ve derleme Yalnızca aile ve derleme erişimi için uygun olan türlerden erişilebilir. Aile veya derleme Yalnızca aile veya derleme erişimi için uygun olan türlerden erişilebilir. public Herhangi bir türden erişilebilir. |
| son | Yöntemler, Özellikler ve olaylar | Sanal yöntem türetilmiş bir türde geçersiz kılınamaz. |
| yalnızca başlatma | Alanlar | Değer yalnızca başlatılabilir ve başlatma sonrasında yazılamaz. |
| örnek | Alanlar, Yöntemler, Özellikler ve olaylar | bir üye static (c# ve c++), Shared (Visual Basic), virtual (c# ve c++) veya (Visual Basic) olarak işaretli değilse, Overridable bir örnek üyesidir (örnek anahtar sözcüğü yoktur). Bellekte bu tür üyelerin, onu kullanan nesneler olduğu gibi birçok kopyası olacaktır. |
| değişmez değer | Alanlar | Alana atanan değer, yerleşik bir değer türünün derleme zamanında bilinen sabit bir değerdir. Değişmez değer alanları bazen sabitler olarak adlandırılır. |
| newslot veya override | Tümü | Üyenin aynı imzaya sahip devralınmış üyelerle nasıl etkileşime gireceğini tanımlar: NewSlot Aynı imzaya sahip devralınmış üyeleri gizler. override Devralınan bir sanal yöntemin tanımını değiştirir. Varsayılan, gazetik ' dır. |
| static | Alanlar, Yöntemler, Özellikler ve olaylar | Üye, türünün belirli bir örneğine değil, tanımlandığı türe aittir; üye, türün bir örneği oluşturulmasa bile vardır ve bu, türün tüm örnekleri arasında paylaşılır. |
| virtual | Yöntemler, Özellikler ve olaylar | Yöntemi türetilmiş bir tür tarafından uygulanabilir ve statik veya dinamik olarak çağrılabilir. Dinamik çağırma kullanılırsa, çağrı çalışma zamanında (derleme zamanında bilinen tür yerine) yapan örnek türü, yöntemin hangi uygulamanın çağrılacağını belirler. Statik olarak sanal bir yöntemi çağırmak için, değişkenin istenen sürümünü kullanan bir türe dönüştürülmesi gerekebilir. |
Aşırı Yükleme
Her tür üyesinin benzersiz bir imzası vardır. Yöntem imzaları yöntem adından ve bir parametre listesinden oluşur (yöntemin bağımsız değişkenlerinin sırası ve türleri). Aynı ada sahip birden çok yöntem, imzaları farklı olduğu sürece bir tür içinde tanımlanabilir. Aynı ada sahip iki veya daha fazla yöntem tanımlandığında, yöntemi aşırı yüklenmiş olarak kabul edilir. Örneğin, ' de, System.Char IsDigit yöntemi aşırı yüklenmiştir. Bir yöntem bir alır Char . Diğer yöntem bir ve kullanır String Int32 .
Not
Dönüş türü yöntemin imzasının bir parçası olarak kabul edilmez. Diğer bir deyişle, yalnızca dönüş türüne göre farklılık gösteren yöntemler aşırı yüklenemez.
Üyeleri devralma, geçersiz kılma ve gizleme
Türetilmiş bir tür, temel türünün tüm üyelerini devralır; diğer bir deyişle, bu Üyeler üzerinde tanımlanır ve türetilmiş türü için kullanılabilir. Devralınan üyelerin davranışı veya nitelikleri iki şekilde değiştirilebilir:
Türetilmiş bir tür, aynı imzaya sahip yeni bir üye tanımlayarak, devralınan bir üyeyi gizleyebilir. Bu, daha önce genel bir üyeyi özel yapmak veya olarak işaretlenen devralınmış bir yöntem için yeni davranış tanımlamak üzere yapılabilir
final.Türetilmiş bir tür, devralınan sanal bir yöntemi geçersiz kılabilir. Geçersiz kılma yöntemi, derleme zamanında bilinen değişkenin türü yerine, çalışma zamanında çağrılacak yöntemin yeni bir tanımını sağlar. Bir yöntem sanal yöntemi yalnızca sanal yöntem olarak işaretli değilse
finalve yeni yöntem en azından sanal yöntem olarak erişilebilir olduğunda geçersiz kılabilir.