Aracılığıyla paylaş


Yapılar ve Sınıflar (Visual Basic)

Visual Basic, yapıların ve sınıfların söz dizimini birlandırır ve sonuçta her iki varlık da aynı özelliklerin çoğunu destekler. Ancak, yapılar ve sınıflar arasında önemli farklar da vardır.

Sınıflar başvuru türü olma avantajına sahiptir; başvuru geçirmek, tüm verileriyle bir yapı değişkeni geçirmekten daha verimlidir. Öte yandan, yapılar genel yığında bellek ayırma gerektirmez.

Bir yapıdan devralamadığınız için yapılar yalnızca genişletilmesi gerekmeyen nesneler için kullanılmalıdır. Oluşturmak istediğiniz nesne küçük bir örnek boyutuna sahip olduğunda yapıları kullanın ve sınıfların ve yapıların performans özelliklerini dikkate alın.

Benzerlik

Yapılar ve sınıflar aşağıdaki açılardan benzerdir:

  • Her ikisi de kapsayıcı türleridir; diğer türleri üye olarak içerdikleri anlamına gelir.

  • Her ikisinde de oluşturucular, yöntemler, özellikler, alanlar, sabitler, numaralandırmalar, olaylar ve olay işleyicileri içerebilen üyeler vardır.

  • Her iki üyenin de bireyselleştirilmiş erişim düzeyleri olabilir. Örneğin, bir üye Public olarak bildirilebilir ve diğer bir üye Private olarak bildirilebilir.

  • Her ikisi de arabirimler uygulayabilir.

  • Her ikisi de parametreli veya parametresiz paylaşılan oluşturuculara sahip olabilir.

  • Her ikisi de, özelliğin en az bir parametre alması koşuluyla varsayılan bir özelliği kullanıma sunabilir.

  • Her ikisi de olayları tanımlayabilir ve oluşturabilir ve her ikisi de delege tanımlayabilir.

Farklılıklar

Yapılar ve sınıflar aşağıdaki özel durumlarla farklılık gösterir:

  • Yapılar değer türleridir; sınıflar başvuru türleridir. Bir yapı türünün değişkeni, sınıf türü olarak verilere başvuru içermek yerine yapı verilerini içerir.

  • Yapılar yığın ayırmayı kullanır; sınıflar yığın ayırmayı kullanır.

  • Tüm yapı öğeleri varsayılan olarakdır Public ; sınıf değişkenleri ve sabitleri Private varsayılan olarak, diğer sınıf üyeleri ise varsayılan olarak olur Public . Sınıf üyeleri için bu davranış, varsayılan Visual Basic 6.0 sistemiyle uyumluluk sağlar.

  • Bir yapıda en az bir paylaşılmayan değişken veya paylaşılmayan, özel olmayan olay öğesi olmalıdır; bir sınıf tamamen boş olabilir.

  • Yapı öğeleri Protected olarak bildirilemez; sınıf üyeleri bu şekilde bildirilebilir.

  • Yapı yordamı yalnızca PaylaşılanSub yordamsa ve yalnızca AddHandler Deyimi aracılığıyla olayları işleyebilir; tüm sınıf yordamları Handles anahtar sözcüğünü veya deyimini AddHandler kullanarak olayları işleyebilir. Daha fazla bilgi için bkz. Olaylar.

  • Yapı değişkeni bildirimleri, diziler için başlatıcıları veya başlangıç boyutlarını belirtemez; sınıf değişkeni bildirimleri bunu yapabilir.

  • Yapılar örtük olarak System.ValueType sınıfından devralır ve başka bir türden devralamaz; sınıflar System.ValueType dışında herhangi bir sınıf veya sınıflardan devralabilir.

  • Yapılar devralınabilir değildir; sınıflar ise devralınabilir.

  • Yapılar asla sonlandırılmaz, bu nedenle ortak dil çalışma zamanı (CLR), hiçbir zaman herhangi bir yapının Finalize yöntemini çağırmaz; sınıflar, etkin bir başvuru kalmadığını algıladığında Finalize yöntemini çağıran çöp toplayıcı (GC) tarafından sonlandırılır.

  • Yapı bir oluşturucu gerektirmez; bir sınıf yapar.

  • Yapıların paylaşılmayan oluşturucuları yalnızca parametre almaları durumunda olabilir; sınıflar bunları parametreli veya parametresiz olarak alabilir.

Her yapı, parametresiz örtük bir ortak oluşturucuya sahiptir. Bu oluşturucu, tüm yapı veri öğelerini varsayılan değerlerine başlatır. Bu davranışı yeniden tanımlayamazsınız.

Örnekler ve Değişkenler

Yapılar değer türleri olduğundan, her yapı değişkeni kalıcı olarak tek bir yapı örneğine bağlıdır. Ancak sınıflar başvuru türleridir ve bir nesne değişkeni farklı zamanlarda çeşitli sınıf örneklerine başvurabilir. Bu ayrım, yapı ve sınıf kullanımınızı aşağıdaki yollarla etkiler:

  • İlklendirme. Yapı değişkeni örtük olarak, yapının parametresiz oluşturucu kullanılarak öğelerin başlatılmasını içerir. Bu nedenle, Dim s As struct1 ile Dim s As struct1 = New struct1()eşdeğerdir.

  • Değişkenlerin Atanması. Bir yapı değişkenini başka bir yapı değişkenine atadığınızda veya bir yapı örneğini bir yordam bağımsız değişkenine geçirdiğinizde, tüm değişken öğelerinin geçerli değerleri yeni yapıya kopyalanır. Bir nesne değişkenini diğerine atadığınızda veya bir nesne değişkenini bir yordama geçirdiğinizde, yalnızca başvuru işaretçisi kopyalanır.

  • Hiçbir Şey Atamamak Bir yapı değişkenine Nothing değerini atayabilirsiniz, ancak örnek değişkenle ilişkilendirilmeye devam eder. Veri öğelerine erişebilir ve yöntemlerini çağırabilirsiniz, ancak değişken öğeleri atama tarafından yeniden başlatılır.

    Buna karşılık, bir nesne değişkenini olarak Nothingayarlarsanız, bunu herhangi bir sınıf örneğinden ayırırsınız ve değişkene başka bir örnek atayana kadar değişken üzerinden hiçbir üyeye erişemezsiniz.

  • Birden Çok Örnek. Bir nesne değişkenine farklı zamanlarda farklı sınıf örnekleri atanabilir ve birkaç nesne değişkeni aynı sınıf örneğine aynı anda başvurabilir. Sınıf üyelerinin değerlerinde yaptığınız değişiklikler, aynı örneğe işaret eden başka bir değişken aracılığıyla erişildiğinde bu üyeleri etkiler.

    Ancak yapı öğeleri kendi örnekleri içinde yalıtılır. Değerlerinde yapılan değişiklikler, aynı Structure bildirimin diğer örneklerinde bile diğer yapı değişkenlerine yansıtılmaz.

  • Eşitlik. İki yapının eşitlik testi, öğeye göre bir testle gerçekleştirilmelidir. yöntemi kullanılarak Equals iki nesne değişkeni karşılaştırılabilir. Equals iki değişkenin aynı örneğe işaret edip etmediğini gösterir.

Ayrıca bakınız