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 bildirilebilir Public ve başka bir Private.

  • 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ı bildirebilir ve oluşturabilir ve her ikisi de temsilciler bildirebilir.

Farklar

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 olarak Protectedbildirilemez; sınıf üyeleri bunu yapabilir.

  • 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 sınıfından System.ValueType devralır ve başka bir türden devralamaz; sınıflar dışında System.ValueTypeherhangi bir sınıftan veya sınıftan devralabilir.

  • Yapılar devralınamaz; sınıflar.

  • Yapılar hiçbir zaman sonlandırılmamıştır, bu nedenle ortak dil çalışma zamanı (CLR) hiçbir zaman herhangi bir yapıda yöntemini çağırmaz Finalize ; sınıflar, hiçbir etkin başvuru kalmadığını algıladığında sınıfı çağıran Finalize çö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:

  • Başlatma. 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şkenler Atanıyor. 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 Atanma. Bir yapı değişkenine Nothing değerini atayabilirsiniz, ancak örnek değişkenle ilişkilendirilmeye devam eder. Değişken öğeleri atama tarafından yeniden başlatılsa da yöntemlerini çağırabilir ve veri öğelerine erişebilirsiniz.

    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 bkz.