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 birPrivate
.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 sabitleriPrivate
varsayılan olarak, diğer sınıf üyeleri ise varsayılan olarak olurPublic
. 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
Protected
bildirilemez; sınıf üyeleri bunu yapabilir.Yapı yordamı yalnızca Paylaşılan
Sub
yordamsa ve yalnızca AddHandler Deyimi aracılığıyla olayları işleyebilir; tüm sınıf yordamları Handles anahtar sözcüğünü veya deyiminiAddHandler
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
ileDim 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
Nothing
ayarlarsanı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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin