Ortak tür sistemi

Ortak tür sistemi, türlerin ortak dil çalışma zamanında nasıl bildirildiğini, kullanıldığını ve yönetildiğini 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ştirmeyi, tür güvenliğini ve yüksek performanslı kod yürütmeyi etkinleştirmeye yardımcı olan bir çerçeve oluşturur.

  • Birçok programlama dilinin tam olarak uygulanmasını destekleyen nesne odaklı bir model sağlar.

  • Dillerin izlemesi gereken kuralları tanımlar ve bu da farklı dillerde yazılmış nesnelerin birbirleriyle etkileşim kurabilmesini sağlamaya yardımcı olur.

  • Uygulama geliştirmede kullanılan temel veri türlerini (, , Char, Int32ve UInt64gibiBooleanByte) içeren bir kitaplık sağlar.

.NET'teki türler

.NET'teki 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ğer türünün örneği bir değişkene atanırsa, bu değişkene değerin yeni bir kopyası verilir.

Başvuru türleri, nesneleri nesnenin gerçek değerine bir başvuruyla (işaretçiye benzer) 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 (işaret eder). Kopya yapılmaz.

.NET'teki ortak tür sistemi aşağıdaki beş tür kategorisini destekler:

Sınıflar

Sınıf, doğrudan başka bir sınıftan türetilebilen ve örtük olarak öğesinden System.Objecttüretilen bir başvuru türüdür. sınıfı, bir nesnenin (sınıfın bir örneği) gerçekleştirebileceği işlemleri (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çerse de (örneğin, uygulama olmadan yalnızca tanım içeren arabirimlerden farklı olarak), uygulaması olmayan bir veya daha fazla üyesi olabilir.

Aşağıdaki tabloda, bir sınıfın sahip olabileceği bazı özellikler açıklanmaktadır. Çalışma zamanını destekleyen her dil, bir sınıf veya sınıf üyesinin bu özelliklerden birine veya daha fazlasına sahip olduğunu göstermek için bir yol sağlar. Ancak, .NET'i hedefleyen tek tek programlama dilleri bu özelliklerin tümünü kullanılabilir hale getirmeyebilir.

Characteristic Açıklama
sealed Başka bir sınıfın bu türden türetilemeyeceğini belirtir.
uygulamalar Sınıfın, arabirim üyelerinin uygulamalarını sağlayarak bir veya daha fazla arabirim kullandığını gösterir.
abstract Sınıfın örneği oluşturulamadığını gösterir. Bunu kullanmak için, ondan başka bir sınıf türetmelisiniz.
Devralır Sınıfın örneklerinin temel sınıfın belirtildiği her yerde kullanılabileceğini gösterir. Bir temel sınıftan devralan türetilmiş bir sınıf, temel sınıf tarafından sağlanan tüm ortak üyelerin uygulamasını kullanabilir veya türetilmiş sınıf kendi uygulamasıyla ortak üyelerin uygulamasını geçersiz kılabilir.
dışarı aktarıldı veya dışarı aktarılmadı 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 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 yerleştirilebilir. İç içe sınıfların üye özellikleri de vardır. Daha fazla bilgi için bkz . İç İçe Türler.

Uygulaması olmayan sınıf üyeleri soyut üyelerdir. Bir veya daha fazla soyut üyesi olan bir sınıf kendisi soyut; yeni örnekleri oluşturulamıyor. Çalışma zamanını hedefleyen bazı diller, üyelerinden hiçbiri soyut olmasa bile sınıfı soyut olarak işaretlemenize olanak tanır. Soyut sınıfı, türetilmiş sınıfların uygun olduğunda devralabileceği veya geçersiz kabileceği temel bir işlev kümesini kapsüllemek istediğinizde kullanabilirsiniz. Soyut olmayan sınıflar somut sınıflar olarak adlandırılır.

Bir sınıf istediğiniz sayıda arabirim uygulayabilir, ancak tüm sınıfların örtük olarak devraldığı öğesine ek olarak System.Objectyalnızca bir temel sınıftan devralabilir. Tüm sınıfların, sınıfın yeni örneklerini başlatan en az bir oluşturucuya sahip olması gerekir. Bir oluşturucuyu açıkça tanımlamazsanız, çoğu derleyici otomatik olarak parametresiz bir oluşturucu sağlar.

Yapılar

Yapı, 'den System.ValueTypeörtük olarak türetilen bir değer türüdür ve bu da 'den System.Objecttüretilir. Yapı, bellek gereksinimleri küçük olan değerleri temsil etmek ve değerleri kesin olarak belirtilmiş parametreleri olan yöntemlere değere göre parametre olarak geçirmek için kullanışlıdır. .NET'te, tüm temel veri türleri (Boolean, Byte, Char, DateTime, Decimal, , Int32SByteInt16DoubleSingleUInt16Int64UInt32ve UInt64) yapılar olarak tanımlanır.

Sınıflar gibi yapılar da hem verileri (yapının alanları) hem de bu veriler üzerinde gerçekleştirilebilecek işlemleri (yapının yöntemleri) tanımlar. Bu, ve System.ValueType sınıflarında tanımlanan sanal yöntemler ve değer türünün kendisinde System.Object tanımlanan tüm yöntemler dahil olmak üzere yapılar üzerinde yöntemleri çağırabileceğiniz anlamına gelir. Başka bir deyişle yapılar alanlar, özellikler ve olayların yanı sıra statik ve statik olmayan yöntemlere sahip olabilir. Yapıların örneklerini oluşturabilir, bunları parametre olarak geçirebilir, yerel değişkenler olarak depolayabilir veya başka bir değer türünde veya başvuru türünde bir alanda depolayabilirsiniz. Yapılar arabirimleri de uygulayabilir.

Değer türleri de çeşitli açılardan sınıflardan farklıdır. İlk olarak, örtük olarak öğesinden System.ValueTypedevralmalarına rağmen, herhangi bir türden doğrudan devralamazlar. Benzer şekilde, tüm değer türleri korumalıdır, bu da başka bir türün türetilebileceği anlamına gelir. Ayrıca oluşturucu gerektirmezler.

Her değer türü için ortak dil çalışma zamanı, değer türüyle aynı duruma ve davranışa sahip bir sınıf olan ilgili kutulu türü sağlar. Değer türünün bir örneği, türünde System.Objectbir parametreyi kabul eden bir yönteme geçirildiğinde kutulanır. Denetim, bir değer türünü başvuru parametresi olarak kabul eden bir yöntem çağrısından döndürüldüğünde, kutulanmamıştır (yani, bir sınıfın örneğinden bir değer türü örneğine dönüştürülür). Bazı diller, kutulu tür gerektiğinde özel söz dizimi kullanmanızı gerektirir; diğerleri gerektiğinde kutulu türü otomatik olarak kullanır. Bir değer türü tanımladığınızda, hem kutulanmış hem de kutulanmamış türü tanımlarsınız.

Listelemeler

Numaralandırma, doğrudan öğesinden System.Enum devralan ve temel alınan ilkel türün değerleri için alternatif adlar sağlayan bir değer türüdür. Numaralandırma türünün adı, yerleşik imzalı veya imzasız tamsayı türlerinden biri olması gereken temel bir tür (, veya UInt64gibiByteInt32) ve bir alan kümesi vardır. Alanlar, her biri bir sabiti temsil eden statik değişmez değerlerdir. Aynı değer birden çok alana atanabilir. Bu durumda, değerlerden birini yansıma ve dize dönüştürme için birincil numaralandırma değeri olarak işaretlemeniz gerekir.

Bir sabit listesi için temel türün değerini atayabilirsiniz (çalışma zamanı için atama gerekmez). Bir sabit listesi örneği oluşturabilir ve yöntemlerinin System.Enumyanı sıra numaralandırmanın temel türü üzerinde tanımlanan tüm yöntemleri çağırabilirsiniz. Ancak bazı diller, temel alınan türün bir örneği gerektiğinde (veya tam tersi) bir numaralandırmayı parametre olarak geçirmenize izin vermeyebilir.

Numaralandırmalar için aşağıdaki ek kısıtlamalar geçerlidir:

  • Kendi yöntemlerini tanımlayamazlar.

  • Arabirimleri uygulayamazlar.

  • Özellikleri veya olayları tanımlayamazlar.

  • Yalnızca genel bir tür içinde iç içe oldukları için genel olmadıkları sürece genel olamazlar. Başka bir ifadeyle, bir sabit listesi kendi tür parametrelerine sahip olamaz.

    Not

    Visual Basic, C# ve C++ ile oluşturulan iç içe türler (numaralandırmalar dahil) tüm kapsayan genel türlerin tür parametrelerini içerir ve bu nedenle kendi tür parametreleri olmasa bile geneldir. Daha fazla bilgi için başvuru konu başlığındaki Type.MakeGenericType "İç İçe Türler" bölümüne bakın.

FlagsAttribute özniteliği, bit alanı olarak adlandırılan özel bir numaralandırma türünü belirtir. Çalışma zamanının kendisi geleneksel sabit listeleri ve bit alanlarını birbirinden ayırmaz, ancak diliniz bunu yapabilir. Bu ayrım yapıldığında bit düzeyinde işleçler adsız değerler oluşturmak için bit alanları üzerinde kullanılabilir, ancak numaralandırmalarda kullanılamaz. Numaralandırmalar genellikle haftanın günleri, ülke veya bölge adları gibi benzersiz öğe listeleri için kullanılır. Bit alanları genellikle gibi Red And Big And Fastbirlikte oluşabilecek kalite veya miktar listeleri için kullanılır.

Aşağıdaki örnekte hem bit alanlarının hem de geleneksel numaralandırmaların nasıl kullanılacağı gösterilmektedir.

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, "yapabilir" ilişkisini veya "bir" ilişkisi olan bir sözleşmeyi tanımlar. Arabirimler genellikle karşılaştırma ve sıralama ( IComparable ve IComparable<T> arabirimleri), eşitlik için test (arabirim) veya bir koleksiyondaki öğeleri numaralandırma ( IEquatable<T>IEnumerable ve IEnumerable<T> arabirimleri) gibi işlevleri uygulamak için kullanılır. Arabirimlerin özellikleri, yöntemleri ve olayları olabilir ve bunların tümü soyut üyelerdir; diğer bir ifadeyle, arabirim üyeleri 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ın veya yapının arabirimde bildirilen soyut üyeler için tanımlar sağlaması gerektiği anlamına gelir. Bir arabirim, bir veya daha fazla arabirim uygulamak için herhangi bir uygulayan sınıf veya yapı gerektirebilir.

Arabirimler için aşağıdaki kısıtlamalar geçerlidir:

  • Arabirim herhangi bir erişilebilirlikle bildirilebilir, ancak arabirim üyelerinin tümünün genel erişilebilirliği olmalıdır.
  • Arabirimler oluşturucuları tanımlayamaz.
  • Arabirimler alanları tanımlayamaz.
  • Arabirimler yalnızca örnek üyeleri tanımlayabilir. Statik üyeleri tanımlayamazlar.

Birden fazla arabirim aynı imzaya sahip bir üye bildirebileceğinden ve bu üyelerin ayrı uygulamaları olabileceğinden, her dilin bir uygulamayı üye gerektiren arabirimle eşleme kuralları sağlaması gerekir.

Temsilciler

Temsilciler, C++ içindeki 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ırlar. İşlev işaretçilerinin aksine, temsilciler güvenli, doğrulanabilir ve tür güvenlidir. Temsilci türü, uyumlu imzaya sahip herhangi bir örnek yöntemini veya statik yöntemi temsil edebilir.

Temsilci parametresinin türü yöntem parametresinin türünden daha kısıtlayıcıysa, temsilcinin parametresi bir yöntemin ilgili parametresiyle uyumludur, çünkü bu, temsilciye geçirilen bir bağımsız değişkenin yönteme güvenli bir şekilde geçirilebileceğini garanti eder.

Benzer şekilde, bir temsilcinin dönüş türü, yöntemin dönüş türü temsilcinin dönüş türünden daha kısıtlayıcıysa 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 atanabileceğini garanti eder.

Örneğin, türünde IEnumerable bir parametresi ve dönüş türü Object olan bir temsilci, türünde bir parametresi ve türünde Object bir dönüş değeri IEnumerableolan bir yöntemi temsil edebilir. Daha fazla bilgi ve örnek kod için bkz Delegate.CreateDelegate(Type, Object, MethodInfo). .

Temsilcinin temsil ettiği yönteme bağlı olduğu söylenir. Yöntemine bağlı olmanın yanı sıra, bir temsilci bir nesneye bağlanabilir. nesnesi yöntemin ilk parametresini temsil eder ve temsilci her çağrıldığında yöntemine geçirilir. Yöntem bir örnek yöntemiyse, ilişkili nesne örtük this parametre (Me Visual Basic'te) olarak geçirilir; yöntem statikse, nesne yöntemin ilk resmi parametresi olarak geçirilir ve temsilci imzası kalan parametrelerle eşleşmelidir. Daha fazla bilgi ve örnek kod için bkz System.Delegate. .

Tüm temsilciler öğesinden System.MulticastDelegatedevralır System.Delegate. C#, Visual Basic ve C++ dilleri bu türlerden devralmaya izin vermez. Bunun yerine, temsilcileri bildirmek için anahtar sözcükler sağlar.

Temsilciler öğesinden MulticastDelegatedevraldığından, temsilcinin temsil ettiği ve temsilci çağrıldığında yürütülen yöntemlerin listesi olan bir çağrı listesi vardır. Listedeki tüm yöntemler, temsilci çağrıldığında sağlanan bağımsız değişkenleri alır.

Not

Temsilcinin dönüş türü olsa bile, çağırma listesinde birden fazla yöntemi olan bir temsilci için dönüş değeri tanımlanmaz.

Geri çağırma yöntemleri gibi birçok durumda, temsilci yalnızca bir yöntemi temsil eder ve gerçekleştirmeniz gereken tek eylem temsilciyi oluşturmak ve çağırmaktır.

Birden çok yöntemi temsil eden temsilciler için .NET, temsilcinin Delegate çağırma listesine yöntem ekleme (yöntem), bir yöntemi kaldırma (Delegate.RemoveDelegate.Combine yöntem) ve çağırma listesini (Delegate.GetInvocationListyöntemi) alma gibi işlemleri desteklemek için ve MulticastDelegate temsilci sınıflarının yöntemlerini sağlar.

Not

Bu diller olay işleyicileri eklemek ve kaldırmak için söz dizimi sağladığından, C#, C++ ve Visual Basic'te olay işleyici temsilcileri için bu yöntemlerin kullanılması gerekmez.

Tür tanımları

Tür tanımı aşağıdakileri içerir:

  • türünde 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.

Özellikler

Öznitelikler, kullanıcı tanımlı ek meta veriler sağlar. En yaygın olarak, bir tür hakkındaki ek bilgileri derlemesinde depolamak veya bir tür üyesinin davranışını tasarım zamanı veya çalışma zamanı ortamında değiştirmek için kullanılırlar.

Öznitelikler kendilerinden System.Attributedevralan sınıflardır. Öznitelik kullanımını destekleyen dillerin her birinin bir dil öğesine öznitelik uygulamak için kendi söz dizimi vardır. Öznitelikler neredeyse tüm dil öğelerine uygulanabilir; bir özniteliğin uygulanabileceği belirli öğeler, bu öznitelik sınıfına AttributeUsageAttribute 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şim özellikleri açıklanmaktadır.

Erişilebilirlik Açıklama
public Türüne tüm derlemeler tarafından erişilebilir.
derleme Türüne yalnızca derlemesinin içinden erişilebilir.

İç içe 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 etki alanını aşamaz.

Bir program P içindeki bir tür T içinde bildirilen iç içe üyenin M erişilebilirlik etki alanı aşağıdaki gibi tanımlanır (bunun M kendisi bir tür olabileceğine dikkat edin):

  • 'nin M bildirilen erişilebilirliği ise public, erişilebilirlik etki alanı M erişilebilirlik etki alanıdır T.

  • olarak bildirilen erişilebilirliği M ise, erişilebilirlik etki alanıM, erişilebilirlik etki alanının T program metniyle P ve dışında Pbildirilen herhangi bir türdeki T program metniyle kesişimidirprotected internal.

  • olarak bildirilen erişilebilirliği M ise protected, erişilebilirlik etki alanı M , erişilebilirlik etki alanının T program metniyle T ve türünden Ttüretilen herhangi bir türle kesişimidir.

  • olarak bildirilen erişilebilirliği M ise internal, erişilebilirlik etki alanı M , erişilebilirlik etki alanının T program metniyle kesişimidir P.

  • 'nin M bildirilen erişilebilirliği ise private, erişilebilirlik etki alanı M program metnidir T.

Tür Adları

Ortak tür sistemi adlara yalnızca iki kısıtlama uygular:

  • Tüm adlar Unicode (16 bit) karakter dizeleri olarak kodlanır.
  • Adların ekli (16 bit) 0x0000 değerine sahip olması yasaktır.

Ancak çoğu dil, tür adlarına ek kısıtlamalar uygular. Tüm karşılaştırmalar bayt bazında yapılır ve bu nedenle büyük/küçük harfe duyarlı ve yerel ayardan bağımsızdır.

Bir tür diğer modüllerden ve derlemelerden türlere başvursa da, bir tür bir .NET modülü içinde tam olarak tanımlanmalıdır. (Ancak, derleyici desteğine bağlı olarak, birden çok kaynak kod dosyası olarak ayrılabilir.) Tür adlarının yalnızca bir ad alanı içinde benzersiz olması gerekir. Bir türü tam olarak tanımlamak için tür adının, türün uygulamasını içeren ad alanı tarafından nitelenmiş 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, istediğiniz sayıda arabirim uygulayabilir. 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 uygulanabilir ve statik veya dinamik olarak çağrılabilir.

Tür üyeleri

Çalışma zamanı, bir türün davranışını ve durumunu belirten türünüzün üyelerini tanımlamanızı sağlar. Tür üyeleri aşağıdakileri içerir:

Alanlar

Bir alan türün durumunu açıklar ve bir bölümünü içerir. Alanlar çalışma zamanı tarafından desteklenen herhangi bir türde olabilir. En yaygın olarak, alanlar ya da privateprotectedolur, böylece yalnızca sınıfın içinden veya türetilmiş bir sınıftan erişilebilir. 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 sunulan alanlar genellikle salt okunur olur ve iki türde olabilir:

  • Değeri tasarım zamanında atanan sabitler. Bunlar bir sınıfın statik üyeleridir, ancak (Shared Visual Basic'te) anahtar sözcüğü kullanılarak static tanımlanmazlar.
  • Değerleri sınıf oluşturucusunda atanabilen salt okunur değişkenler.

Aşağıdaki örnekte bu iki salt okunur alan kullanımı gösterilmektedir.

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

Properties

Bir özellik, türün değerini veya durumunu adlandırıp özelliğin değerini almak veya ayarlamak için yöntemleri tanımlar. Özellikler ilkel türler, ilkel tür koleksiyonları, kullanıcı tanımlı türler veya kullanıcı tanımlı tür koleksiyonları olabilir. Özellikler genellikle bir türün genel arabirimini türün gerçek gösteriminden bağımsız tutmak için kullanılır. Bu, özelliklerin doğrudan sınıfında depolanmayan değerleri yansıtmasına (örneğin, bir özellik hesaplanan bir değer döndürdüğünde) veya değerler özel alanlara atanmadan önce doğrulama gerçekleştirmesine olanak tanır. Aşağıdaki örnekte ikinci desen gösterilmektedir.

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 eklemeye ek olarak, okunabilir özellik içeren bir tür için Microsoft ara dili (MSIL) bir get_propertyname yöntemi içerir ve yazılabilir özellik içeren bir tür için MSIL bir set_propertyname yöntemi içerir.

Yöntemler

Bir yöntem, türünde kullanılabilen işlemleri açıklar. Yöntemin imzası, tüm parametrelerinin ve dönüş değerinin izin verilebilen türlerini belirtir.

Çoğu yöntem, yöntem çağrıları için gereken parametre sayısını tam olarak tanımlasa da, bazı yöntemler değişken sayıda parametreyi destekler. Bu yöntemlerin son bildirilen parametresi özniteliğiyle ParamArrayAttribute işaretlenir. Dil derleyicileri genellikle C# ve ParamArray Visual Basic gibi params açıkça gereksiz kullanımı ParamArrayAttribute sağlayan bir anahtar sözcük sağlar.

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 yöntemler gibi, bir oluşturucu da parametreleri içerebilir; ancak oluşturucuların dönüş değeri yoktur (yani döndürür 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 parametrelendirilmelidir; bir yapı parametresiz oluşturucu tanımlayamaz ve derleyiciler yapılar veya diğer değer türleri için parametresiz oluşturucular oluşturmaz. Tüm değer türlerinin örtük bir parametresiz 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ğerleriyle başlatır.

Ekinlikler

Olay, yanıt verilebilen bir olayı tanımlar ve olaya abone olma, aboneliği kaldırma ve olayı oluşturma yöntemlerini tanımlar. Olaylar genellikle diğer durum değişiklikleri türlerini bilgilendirmek için kullanılır. Daha fazla bilgi için bkz . Olaylar.

İç içe geçmiş türler

İç içe yerleştirilmiş tür, başka bir türün üyesi olan bir türdür. İç içe türler, içeren türleriyle sıkı bir şekilde birleştirilmeli ve genel amaçlı bir tür olarak yararlı olmamalıdır. İç içe türler, bildirim türü iç içe türün örneklerini kullandığında ve oluşturduğunda ve iç içe türün kullanımı genel üyelerde gösterilmediğinde yararlıdır.

İç içe türler bazı geliştiriciler için kafa karıştırıcıdır ve görünürlük için cazip bir neden olmadığı sürece genel olarak görünür olmamalıdır. İyi tasarlanmış bir kitaplıkta, geliştiricilerin nesneleri oluşturmak veya değişkenleri bildirmek için iç içe türleri nadiren kullanması gerekir.

Tür üyelerinin özellikleri

Ortak tür sistemi, tür üyelerinin çeşitli özelliklere sahip olmasını sağlar; ancak tüm bu özellikleri desteklemek için diller gerekli değildir. Aşağıdaki tabloda üye özellikleri açıklanmaktadır.

Characteristic Şu şekilde uygulanabilir: Açıklama
abstract Yöntemler, özellikler ve olaylar türü yöntemin uygulamasını sağlamaz. Soyut yöntemleri devralan veya uygulayan türlerin yöntemi için bir uygulama sağlaması gerekir. Tek özel durum, türetilen türün kendisi bir soyut tür olmasıdır. Tüm soyut yöntemler sanaldır.
özel, aile, bütünleştirilmiş kod, aile ve bütünleştirilmiş kod, aile veya bütünleştirilmiş kod ya da genel Tümünü Üyenin erişilebilirliğini tanımlar:

private
Yalnızca üyeyle aynı türde veya iç içe bir tür içinde erişilebilir.

aile
Üyeyle aynı türde ve ondan devralan türetilmiş türlerden erişilebilir.

derleme
Yalnızca türün tanımlandığı derlemede erişilebilir.

aile ve montaj
Yalnızca hem aile hem de derleme erişimine uygun türlerden erişilebilir.

aile veya montaj
Yalnızca aile veya derleme erişimine uygun türlerden erişilebilir.

public
Her 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şlatmadan sonra yazılamaz.
örnek Alanlar, yöntemler, özellikler ve olaylar Bir üye (C# ve C++), (Visual Basic), Sharedvirtual (C# ve C++) veya Overridable (Visual Basic) olarak static işaretlenmemişse, bir örnek üyesidir (örnek anahtar sözcüğü yoktur). Bellekte bu tür üyelerin, onu kullanan nesneler kadar ç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 geçersiz kılma Tümünü Üyenin aynı imzaya sahip devralınan üyelerle nasıl etkileşim kurduğunu tanımlar:

Newslot
Aynı imzaya sahip devralınan üyeleri gizler.

override
Devralınan bir sanal yöntemin tanımını değiştirir.

Varsayılan değer haber grafiğidir.
static Alanlar, yöntemler, özellikler ve olaylar Üye, türün belirli bir örneğine değil, tanımlandığı türe aittir; üye türün bir örneği oluşturulmamış olsa bile var olur ve 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, çalışma zamanında çağrı yapan örneğin türü (derleme zamanında bilinen tür yerine) yöntemin hangi uygulamasının çağrıldığını belirler. Bir sanal yöntemi statik olarak çağırmak için değişkenin yöntemin istenen sürümünü kullanan bir türe yayınlanması gerekebilir.

Aşırı Yükleme

Her tür üyesinin benzersiz bir imzası vardır. Yöntem imzaları yöntem adından ve parametre listesinden (yöntemin bağımsız değişkenlerinin sırası ve türleri) oluşur. 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öntemin aşırı yüklendiği söylenir. Örneğin, içinde System.CharIsDigit yöntemi aşırı yüklenmiştir. Bir yöntem bir Charalır. Diğer yöntem bir String ve Int32alır.

Not

Dönüş türü bir yöntemin imzasının parçası olarak kabul edilmez. Yani, yöntemler yalnızca dönüş türüne göre farklıysa 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 ifadeyle, bu üyeler türetilen tür üzerinde tanımlanır ve bu tür için kullanılabilir. Devralınan üyelerin davranışları 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 ortak bir üyeyi özel yapmak veya olarak finalişaretlenmiş devralınan bir yöntem için yeni davranış tanımlamak için yapılabilir.

  • Türetilmiş bir tür devralınan bir sanal 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ındaki değerin türüne göre çağrılacak yöntemin yeni bir tanımını sağlar. Bir yöntem yalnızca sanal yöntem olarak final işaretlenmediyse ve yeni yöntem en az sanal yöntem kadar erişilebilir olduğunda sanal yöntemi geçersiz kılabilir.

Ayrıca bkz.