Aracılığıyla paylaş


Visual Basic'te nesneler ve sınıflar

Nesne, birim olarak ele alınabilen kod ve verilerin birleşimidir. Nesne, denetim veya form gibi bir uygulamanın parçası olabilir. Uygulamanın tamamı bir nesne de olabilir.

Visual Basic'te bir uygulama oluşturduğunuzda, nesnelerle sürekli çalışırsınız. Denetimler, formlar ve veri erişim nesneleri gibi Visual Basic tarafından sağlanan nesneleri kullanabilirsiniz. Visual Basic uygulamanızdaki diğer uygulamalardaki nesneleri de kullanabilirsiniz. Hatta kendi nesnelerinizi oluşturabilir ve bunlar için ek özellikler ve yöntemler tanımlayabilirsiniz. Nesneler, programlar için önceden oluşturulmuş yapı taşları gibi davranır; bir kez kod yazmanıza ve tekrar tekrar yeniden kullanmanıza olanak sağlar.

Bu konu başlığında nesneler ayrıntılı olarak açıklanmaktadır.

Nesneler ve sınıflar

Visual Basic'teki her nesne bir sınıf tarafından tanımlanır. Sınıf, bir nesnenin değişkenlerini, özelliklerini, yordamlarını ve olaylarını açıklar. Nesneler sınıfların örnekleridir; bir sınıf tanımladıktan sonra ihtiyacınız olan sayıda nesne oluşturabilirsiniz.

Bir nesne ile sınıfı arasındaki ilişkiyi anlamak için kurabiye kalıpları ve kurabiyeleri düşünün. Kurabiye kesici sınıfıdır. Her tanımlama bilgisinin özelliklerini tanımlar, örneğin boyut ve şekil. sınıfı nesneleri oluşturmak için kullanılır. Nesneler çerezlerdir.

Üyelerine erişebilmek için önce bir nesne oluşturmanız gerekir, ancak Shared üyeleri sınıfın nesnesi olmadan da erişilebilir.

Sınıftan nesne oluşturma

  1. Nesne oluşturmak istediğiniz sınıfı belirleyin veya kendi sınıfınızı tanımlayın. Örneğin:

    Public Class Customer
        Public Property AccountNumber As Integer
    End Class
    
  2. Sınıf örneğini atayabileceğiniz bir değişken oluşturmak için bir Dim Deyimi yazın. değişkeni istenen sınıfın türünde olmalıdır.

    Dim nextCustomer As Customer
    
  3. Değişkeni sınıfın yeni bir örneğine başlatmak için New Operator anahtar sözcüğünü ekleyin.

    Dim nextCustomer As New Customer
    
  4. Artık nesne değişkeni aracılığıyla sınıfın üyelerine erişebilirsiniz.

    nextCustomer.AccountNumber = lastAccountNumber + 1
    

Uyarı

Mümkün olduğunda, değişkeni atamak istediğiniz sınıf türünde olacak şekilde bildirmeniz gerekir. Buna erken bağlama denir. Derleme zamanında sınıf türünü bilmiyorsanız, değişkenini Nesne Veri Türünde olarak bildirerek geç bağlamayı çağırabilirsiniz. Ancak geç bağlama performansı yavaşlatabilir ve çalışma zamanı nesnesinin üyelerine erişimi sınırlayabilir. Daha fazla bilgi için bkz. Nesne Değişkeni Bildirimi.

Birden çok örnek

Bir sınıftan yeni oluşturulan nesneler genellikle birbiriyle aynıdır. Ancak bağımsız nesneler olarak var olduktan sonra değişkenleri ve özellikleri diğer örneklerden bağımsız olarak değiştirilebilir. Örneğin, bir forma üç onay kutusu eklerseniz, her onay kutusu nesnesi sınıfın CheckBox bir örneğidir. Tek tek CheckBox nesneler, sınıf tarafından tanımlanan ortak bir özellik ve özellik kümesini (özellikler, değişkenler, yordamlar ve olaylar) paylaşır. Ancak, her birinin kendi adı vardır, ayrı olarak etkinleştirilebilir ve devre dışı bırakılabilir ve formda farklı bir konuma yerleştirilebilir.

Nesne üyeleri

Nesne, bir sınıfın örneğini temsil eden bir uygulamanın öğesidir. Alanlar, özellikler, yöntemler ve olaylar nesnelerin yapı taşlarıdır ve üyelerini oluşturur.

Üye Erişimi

Bir nesnenin üyesine, sırasıyla nesne değişkeninin adını, nokta (. ) ve üyenin adını belirterek erişebilirsiniz. Aşağıdaki örnek bir Text nesnenin Label özelliğini ayarlar.

warningLabel.Text = "Data not saved"

Üyelerin IntelliSense listesi

IntelliSense, üye erişim işleci olarak nokta (.) yazdığınızda, Liste Üyeleri seçeneğini çağırdığınızda sınıfın üyelerini listeler. Bir sınıfın örneği olarak bildirilen bir değişken adının ardından nokta yazarsanız, IntelliSense yalnızca örnek üyelerini listeler ve hiçbir paylaşılan üyeyi göstermez. Sınıf adının sonuna bir nokta koyarsanız, IntelliSense tüm paylaşılan üyeleri listeler, ancak hiçbir örnek üye listelenmez. Daha fazla bilgi için bkz . IntelliSense kullanma.

Alanlar ve özellikler

Alanlar ve özellikler bir nesnede depolanan bilgileri gösterir. Atama deyimleriyle değerlerini, yordamdaki yerel değişkenleri aldığınız ve ayarladığınız gibi alır ve ayarlarsınız. Aşağıdaki örnek Width özelliğini alır ve bir ForeColor nesnesinin Label özelliğini ayarlar.

Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red

Bir alanın üye değişkeni olarak da adlandırıldığını unutmayın.

Aşağıdaki durumlarda özellik yordamlarını kullanın:

  • Bir değerin ne zaman ve nasıl ayarlandığını veya alınıp alınyacağını denetlemeniz gerekir.

  • özelliği, doğrulanması gereken iyi tanımlanmış bir değer kümesine sahiptir.

  • Değerin ayarlanması, nesnenin durumunda bir özellik gibi algılanabilir bir IsVisible değişikliğe neden olur.

  • özelliğinin ayarlanması, diğer iç değişkenlerde veya diğer özelliklerin değerlerinde değişikliklere neden olur.

  • Özelliğin ayarlanabilmesi veya alınabilmesi için önce bir dizi adım gerçekleştirilmesi gerekir.

Şu durumlarda alanları kullanın:

  • Değer, kendi kendini doğrulayıcı türdedir. Örneğin, True değişkenine False veya Boolean dışındaki bir değer atandığında hata veya otomatik veri dönüştürme gerçekleşir.

  • Veri türü tarafından desteklenen aralıktaki tüm değerler geçerlidir. Bu, Single veya Double türünün birçok özelliği için geçerlidir.

  • özelliği bir String veri türüdür ve dizenin boyutu veya değeri üzerinde bir kısıtlama yoktur.

  • Daha fazla bilgi için bkz. Özellik Yordamları.

Tavsiye

Sabit olmayan alanları her zaman özel tutun. Bunu genel yapmak istediğinizde, bunun yerine bir özellik tanımlayın.

Yöntemler

Yöntem, bir nesnenin gerçekleştirebileceği bir eylemdir. Örneğin, Add bir açılır kutuya yeni bir giriş ekleyen ComboBox nesnesinin yöntemidir.

Aşağıdaki örnekte bir Start nesnenin Timer yöntemi gösterilmektedir.

Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()

Bir yöntemin yalnızca bir nesne tarafından kullanıma sunulan bir yordam olduğunu unutmayın.

Daha fazla bilgi için bkz. Yordamlar.

Etkinlikler

Olay, fareye tıklama veya bir tuşa basma gibi nesne tarafından tanınan ve yanıt vermek üzere kod yazabileceğiniz bir eylemdir. Olaylar bir kullanıcı eyleminin veya program kodunun sonucu olarak oluşabilir veya sistemden kaynaklanabilir. Bir olayı tetikleyen koda ve olayı yanıtlayan koda işleyen koda denir.

Ayrıca, nesneleriniz tarafından oluşturulacak ve diğer nesneler tarafından işlenecek kendi özel olaylarınızı geliştirebilirsiniz. Daha fazla bilgi için bkz. Olaylar.

Örnek üyeleri ve paylaşılan üyeler

Bir sınıftan nesne oluşturduğunuzda, sonuç bu sınıfın bir örneğidir. Shared anahtar sözcüğüyle bildirilmeyen üyeler, kesinlikle söz konusu örneğe ait olan örnek üyeleridir. Bir örnekteki örnek üyesi, aynı sınıfın başka bir örneğindeki aynı üyeden bağımsızdır. Örneğin bir örnek üye değişkeninin farklı örneklerde farklı değerleri olabilir.

anahtar sözcüğüyle Shared bildirilen üyeler, belirli bir örneğe değil, bir bütün olarak sınıfına ait olan paylaşılan üyelerdir. Paylaşılan üye, sınıfının kaç örneğini oluşturursanız oluşturun veya hiç örnek oluşturmasanız bile yalnızca bir kez bulunur. Örneğin paylaşılan üye değişkeninin yalnızca bir değeri vardır ve bu değer sınıfa erişebilen tüm kodlar tarafından kullanılabilir.

Paylaşılmayan üyelere erişme

  1. Nesnesinin sınıfından oluşturulduğundan ve bir nesne değişkenine atandığından emin olun.

    Dim secondForm As New System.Windows.Forms.Form
    
  2. Üye erişim ifadesinde, nesne değişkeni adından sonra member-access operatörü (.) ve ardından üye adını belirtin.

    secondForm.Show()
    

Paylaşılan üyelere erişme

  • Sınıf adını üye erişim operatörüyle (.) takip edin ve ardından üye adını girin. Nesnenin bir Shared üyesine her zaman doğrudan sınıf adı üzerinden erişmeniz gerekir.

    Console.WriteLine("This computer is called " & Environment.MachineName)
    
  • Sınıfından zaten bir nesne oluşturduysanız, alternatif olarak nesnenin değişkeni aracılığıyla bir Shared üyeye erişebilirsiniz.

Sınıflar ve modüller arasındaki farklar

Sınıflar ve modüller arasındaki temel fark, standart modüller oluşturulamazken sınıfların nesne olarak örneklenebilir olmasıdır. Standart modül verilerinin yalnızca bir kopyası olduğundan, programınızın bir bölümü standart modüldeki ortak değişkeni değiştirdiğinde, programın diğer bir bölümü bu değişkeni okursa aynı değeri alır. Buna karşılık, her örnek nesne için nesne verileri ayrı ayrı bulunur. Diğer bir fark, standart modüllerden farklı olarak sınıfların arabirimler uygulayabilmesidir. Bir sınıf MustInherit değiştiricisi ile işaretlenmişse, doğrudan örneği oluşturulamaz. Ancak, modüller devralınamazken devralınabileceği için modülden hala farklıdır.

Uyarı

Shared Değiştirici bir sınıf üyesine uygulandığında, sınıfın belirli bir örneği yerine sınıfın kendisiyle ilişkilendirilir. Üyeye doğrudan sınıf adı kullanılarak erişilir ve modül üyelerine de aynı şekilde erişilir.

Sınıflar ve modüller de üyeleri için farklı kapsamlar kullanır. Bir sınıf içinde tanımlanan üyelerin kapsamı, sınıfın belirli bir örneğinde yer alır ve yalnızca nesnenin ömrü boyunca mevcuttur. Sınıf üyelerine sınıfın dışından erişmek için Nesne biçiminde tam adlar kullanmanız gerekir. Üye.

Öte yandan, modül içinde bildirilen üyelere varsayılan olarak genel erişim sağlanır ve modüle erişebilen tüm kodlar tarafından erişilebilir. Bu, standart modüldeki değişkenlerin projenizin herhangi bir yerinden görülebildiğinden ve programın ömrü boyunca mevcut olduklarından, etkili bir şekilde genel değişkenler olduğu anlamına gelir.

Sınıfları ve nesneleri yeniden kullanma

Nesneler, değişkenleri ve yordamları bir kez bildirmenize ve gerektiğinde bunları yeniden kullanmanıza olanak sağlar. Örneğin, bir uygulamaya yazım denetleyicisi eklemek istiyorsanız, yazım denetimi işlevselliği sağlamak için tüm değişkenleri ve destek işlevlerini tanımlayabilirsiniz. Yazım denetleyicisini bir sınıf olarak oluşturursanız, derlenmiş derlemeye başvuru ekleyerek bunu diğer uygulamalarda yeniden kullanabilirsiniz. Daha da iyisi, başka birinin daha önce geliştirmiş olduğu bir yazım denetleyicisi sınıfını kullanarak kendinize biraz çalışma tasarruf edebilirsiniz.

.NET, kullanılabilecek birçok bileşen örneği sağlar. Aşağıdaki örnek, TimeZone ad alanında System sınıfını kullanır. TimeZone, geçerli bilgisayar sisteminin saat dilimi hakkında bilgi almanıza olanak tanıyan üyeler sunar.

Public Sub ExamineTimeZone()
    Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
    Dim s As String = "Current time zone is "
    s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
    s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
    s &= "different from UTC (coordinated universal time)"
    s &= vbCrLf & "and is currently "
    If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
    s &= "on ""summer time""."
    Console.WriteLine(s)
End Sub

Yukarıdaki örnekte, birinci Dim Deyimi türünde TimeZone olarak bir nesne değişkeni tanımlar ve özellikten TimeZone döndürülen bir CurrentTimeZone nesneyi atar.

Nesneler arasındaki ilişkiler

Nesneler birbiriyle çeşitli yollarla ilişkilendirilebilir. İlişkinin temel türleri hiyerarşik ve kapsamadır.

Hiyerarşik ilişki

Sınıflar daha temel sınıflardan türetildiğinde hiyerarşik bir ilişkiye sahip oldukları söylenir. Sınıf hiyerarşileri, daha genel bir sınıfın alt türü olan öğeleri açıklarken kullanışlıdır.

Aşağıdaki örnekte, normal Button gibi davranan ancak ön plan ve arka plan renklerini tersine çeviren bir yöntemi de kullanıma sunan özel bir tür Button tanımlamak istediğinizi varsayalım.

Zaten var olan bir sınıftan türetilmiş bir sınıf tanımlama

  1. İhtiyacınız olan nesneyi oluşturacağınız sınıfı tanımlamak için Sınıf Deyimi kullanın.

    Public Class ReversibleButton
    

    Bir End Class deyiminin sınıfınızdaki son kod satırını izlediğinden emin olun. Varsayılan olarak, tümleşik geliştirme ortamı (IDE), bir End Class komutunu girdiğinizde otomatik olarak bir Class oluşturur.

  2. Class deyimini hemen Bir Inherits Deyimi ile izleyin. Yeni sınıfınızın türetildiği sınıfı belirtin.

    Inherits System.Windows.Forms.Button
    

    Yeni sınıfınız, temel sınıf tarafından tanımlanan tüm üyeleri devralır.

  3. Türetilmiş sınıfınızın ortaya koyduğu ilave üyelerin kodunu ekleyin. Örneğin, bir ReverseColors yöntem ekleyebilirsiniz ve türetilmiş sınıfınız aşağıdaki gibi görünebilir:

    Public Class ReversibleButton
        Inherits System.Windows.Forms.Button
            Public Sub ReverseColors()
                Dim saveColor As System.Drawing.Color = Me.BackColor
                Me.BackColor = Me.ForeColor
                Me.ForeColor = saveColor
           End Sub
    End Class
    

    sınıfından ReversibleButton bir nesne oluşturursanız, sınıfın tüm üyelerine Button , yöntemine ReverseColors ve içinde ReversibleButtontanımladığınız diğer yeni üyelere erişebilir.

Türetilmiş sınıflar, üyeleri temel aldıkları sınıftan devralarak sınıf hiyerarşisinde ilerledikçe karmaşıklık eklemenize olanak sağlar. Daha fazla bilgi için bkz . Devralma Temelleri.

Kodu derleme

Derleyicinin, yeni sınıfınızı türetmek istediğiniz sınıfa erişebile olduğundan emin olun. Bu, önceki örnekte olduğu gibi adını tam olarak niteleme veya imports deyiminde (.NET Ad Alanı ve Tür) ad alanını tanımlama anlamına gelebilir. Sınıf farklı bir projede bulunuyorsa, o projeye bir referans eklemeniz gerekebilir. Daha fazla bilgi için bkz . Projedeki başvuruları yönetme.

Kapsama ilişkisi

Nesnelerin ilişkilendirilebileceği bir diğer yol da kapsama ilişkisidir. Kapsayıcı nesneleri mantıksal olarak diğer nesneleri kapsüller. Örneğin, OperatingSystem nesnesi, özelliklerinden Version aracılığıyla döndürülen mantıksal olarak bir Version nesnesi içerir. Kapsayıcı nesnesinin fiziksel olarak başka bir nesne içermediğini unutmayın.

Koleksiyonlar

Belirli bir nesne kapsama türü koleksiyonlar tarafından temsil edilir. Koleksiyonlar, numaralandırılabilir benzer nesne gruplarıdır. Visual Basic, bir koleksiyonun öğeleri arasında yineleme yapmanıza olanak tanıyan For Each...Next Deyimi için belirli bir sözdizimini destekler. Buna ek olarak, koleksiyonlar, öğeleri dizinlerine göre veya benzersiz bir dizeyle ilişkilendirerek almak için bir Item[] kullanmanıza genellikle olanak sağlar. Dizinleri kullanmadan öğe eklemenize veya kaldırmanıza olanak sağladığından koleksiyonların kullanılması dizilerden daha kolay olabilir. Kullanım kolaylığı nedeniyle koleksiyonlar genellikle formları ve denetimleri depolamak için kullanılır.

İzlenecek yol: Sınıfları Tanımlama
Sınıf oluşturma hakkında adım adım bir açıklama sağlar.

Aşırı Yüklenmiş Özellikler ve Yöntemler
Aşırı Yüklenmiş Özellikler ve Yöntemler

Devralma Temelleri
Devralma değiştiricilerini, yöntemleri ve özellikleri, MyClass'ı ve MyBase'i geçersiz kılmayı kapsar.

Nesne Ömrü: Nesnelerin Oluşturulma ve Yok Edilme Şekli
Sınıf örneklerini oluşturma ve yok etme konularını açıklar.

Anonim Tipler
Veri türü için bir sınıf tanımı yazmadan nesne oluşturmanızı sağlayan anonim türlerin nasıl oluşturulacağını ve kullanılacağını açıklar.

Nesne Başlatıcılar: Adlandırılmış ve Anonim Türler
Tek bir ifade kullanarak adlandırılmış ve anonim türlerin örneklerini oluşturmak için kullanılan nesne başlatıcılarını açıklar.

Nasıl yapılır: Anonim Tür Bildirimlerinde Özellik Adlarını ve Türlerini Çıkarma
Anonim tür bildirimlerinde özellik adlarının ve türlerinin nasıl çıkarileceğini açıklar. Başarılı ve başarısız çıkarım örnekleri sağlar.