Visual Basic içindeki nesneler ve sınıflar

Bir nesne , bir birim olarak kabul edilebilir kod ve verilerin bir birleşimidir. Bir nesne, bir denetim veya form gibi bir uygulamanın parçası olabilir. Tüm uygulama da bir nesne olabilir.

Visual Basic bir uygulama oluşturduğunuzda, sürekli olarak nesnelerle çalışırsınız. denetim, form ve veri erişim nesneleri gibi Visual Basic tarafından sunulan nesneleri kullanabilirsiniz. ayrıca, Visual Basic uygulamanızdaki diğer uygulamalardan da nesneleri kullanabilirsiniz. Hatta kendi nesnelerinizi oluşturabilir ve bunlara yönelik ek özellikler ve Yöntemler tanımlayabilirsiniz. Nesneler, programlar için önceden yazılmış derleme blokları gibi davranır; bir kez kod parçası yazmanızı ve üzerinde ve üzerinde yeniden kullanmanıza olanak tanır.

Bu konu, nesneleri ayrıntılı bir şekilde ele alır.

Nesneler ve sınıflar

Visual Basic içindeki her nesne bir sınıf tarafından tanımlanır. Bir 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 ve sınıfı arasındaki ilişkiyi anlamak için tanımlama bilgisi cutters ve tanımlama bilgilerini düşünün. Tanımlama bilgisi kesici sınıftır. Her tanımlama bilgisinin, örneğin boyut ve şekil özelliklerini tanımlar. Sınıfı, nesneleri oluşturmak için kullanılır. Nesneler tanımlama bilgileri.

Bir nesnesi, Shared sınıfının bir nesnesi olmadan erişilebilen Üyeler hariç, üyelerine erişebilmek için önce bir nesne oluşturmanız gerekir.

Sınıftan nesne oluşturma

  1. Hangi sınıftan bir nesne oluşturmak istediğinizi belirleyin veya kendi sınıfınızı tanımlayın. Örnek:

    Public Class Customer
        Public Property AccountNumber As Integer
    End Class
    
  2. Bir sınıf örneği atayabilmeniz için bir değişken oluşturmak üzere bir Dim bildirisi yazın. Değişken, istenen sınıfın türünden olmalıdır.

    Dim nextCustomer As Customer
    
  3. Değişkeni sınıfını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
    

Not

Mümkün olduğunda, değişkeni atamak istediğiniz sınıf türünde olacak şekilde bildirmeniz gerekir. Bu, erken bağlama olarak adlandırılır. Derleme zamanında sınıf türünü bilmiyorsanız, değişkeni nesne veri türündeolacak şekilde bildirerek geç bağlamayı çağırabilirsiniz. Ancak, geç bağlama performansı daha yavaş yapabilir 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 birbirleriyle aynıdır. Ancak, ayrı nesneler olarak varolduktan 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ın bir örneğidir CheckBox . Ayrı 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, bağımsız olarak etkinleştirilebilir ve devre dışı bırakılabilir ve formda farklı bir konuma yerleştirilebilir.

Nesne üyeleri

Bir 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, nesne değişkeninin adını, bir nokta ( . ) ve üyenin adını belirterek erişirsiniz. Aşağıdaki örnek Text bir nesnesinin özelliğini ayarlar Label .

warningLabel.Text = "Data not saved"

Üyelerin IntelliSense listesi

IntelliSense, liste üyeleri seçeneğini çağırdığınızda bir sınıfın üyelerini listeler, örneğin, . üye erişim operatörü olarak bir nokta () yazdığınızda. Bu sınıfın bir örneği olarak belirtilen değişkenin adını izleyen bir süre yazarsanız, IntelliSense tüm örnek üyelerini ve paylaşılan üyelerin hiçbirini listeler. Sınıf adının kendisini izleyen dönemi yazarsanız, IntelliSense tüm paylaşılan üyeleri ve örnek üyelerinden hiçbirini listeler. Daha fazla bilgi için bkz. IntelliSense kullanma.

Alanlar ve Özellikler

Alanlar ve Özellikler bir nesnesinde depolanan bilgileri temsil eder. Değerlerini atama deyimleriyle alır ve bir yordamda yerel değişkenleri ayarladığınız şekilde ayarlarsınız. Aşağıdaki örnek, özelliğini alır Width ve ForeColor bir nesnenin özelliğini ayarlar Label .

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

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

Şu durumlarda özellik yordamlarını kullan:

  • Değerin ne zaman ve nasıl ayarlanacağını veya alındığını kontrol etmeniz gerekir.

  • Özelliğin doğrulanması gereken, iyi tanımlanmış bir değer kümesi vardır.

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

  • Özelliği ayarlamak, diğer iç değişkenlerde veya diğer özelliklerin değerlerine değişikliklere neden olur.

  • Özelliğin ayarlanamayacağını veya alınabilmesi için önce bir adım kümesi gerçekleştirilmelidir.

Şu durumlarda alanları kullan:

  • Değer kendi kendine doğrulama türüdür. Örneğin, bir değişken ya da True False bir değişkene atanan bir değer varsa, bir hata veya otomatik veri dönüştürme gerçekleşir Boolean .

  • Veri türü tarafından desteklenen aralıktaki herhangi bir değer geçerlidir. Bu, veya türündeki birçok özellik için geçerlidir Single Double .

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

  • Daha fazla bilgi için bkz. özellik yordamları.

İpucu

Her zaman sabit olmayan alanları özel tutun. Ortak hale getirmek istediğinizde, bunun yerine bir özellik kullanın.

Yöntemler

Bir Yöntem , bir nesnenin gerçekleştirebileceği bir eylemdir. Örneğin, Add ComboBox bir Birleşik giriş kutusuna yeni bir giriş ekleyen nesnenin bir yöntemidir.

Aşağıdaki örnek Start bir nesnesinin yöntemini gösterir Timer .

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

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

Daha fazla bilgi için bkz. yordamlar.

Ekinlikler

Bir olay, fareyi tıklatmak veya bir tuşa basmak ve yanıt vermek için kod yazabileceğiniz gibi bir nesne tarafından tanınan bir eylemdir. Olaylar, bir kullanıcı eylemi veya program kodu sonucu olarak veya sistem tarafından neden olabileceği için oluşabilir. Bir olaya işaret eden kod, olayı yükseltmek ve kendisine yanıt veren kod onu işleyecek şekilde söylenir.

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

Örnek üyeleri ve paylaşılan Üyeler

Bir sınıftan bir nesne oluşturduğunuzda, sonuç bu sınıfın bir örneğidir. Paylaşılan anahtar sözcükle bildirilmeyen Üyeler örnek üyeleridir ve bu belirli örneğe tamamen aittir. Bir örnekteki örnek üye, aynı sınıfın başka bir örneğindeki aynı Üyeden bağımsız. Örneğin, örnek üye değişkeni farklı örneklerde farklı değerlere sahip olabilir.

Anahtar sözcüğüyle belirtilen Üyeler Shared , belirli bir örneğe değil, bir bütün olarak sınıfa ait olan paylaşılan üyeleridir. Paylaşılan bir üye yalnızca bir kez bulunur, sınıfının kaç örneği oluşturabileceğiniz ve hatta örnek oluştursanız bile. Örneğin, bir paylaşılan üye değişkeni, sınıfına erişebilen tüm kodlar için kullanılabilen yalnızca bir değere sahiptir.

Paylaşılan olmayan ü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. Üyeye erişen ifadede, nesne değişkeni adını üye erişim işleci ( . ) ve ardından üye adı ile birlikte izleyin.

    secondForm.Show()
    

Paylaşılan üyelere erişme

  • Üye erişim işleci ( . ) ve ardından üye adı ile sınıf adını izleyin. SharedDoğrudan sınıf adı aracılığıyla nesnenin üyesine her zaman erişmeniz gerekir.

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

Sınıflar ve modüller arasındaki farklılıklar

Sınıflar ve modüller arasındaki temel fark, sınıfların standart modüller kullanılamadığı sürece nesneler olarak örneklenebilir. Standart modülün verilerinin yalnızca bir kopyası olduğundan, programınızın bir kısmı standart bir modülde ortak bir değişkeni değiştirdiğinde, programın başka bir kısmı o değişkeni okuduğunda aynı değeri alır. Buna karşılık, nesne verileri her bir örneklenmiş nesne için ayrı olarak mevcuttur. Diğer bir farklılık ise standart modüllerin aksine sınıfların arabirimler uygulayabildiği bir farktır. Bir sınıf, MustInherit değiştiricisi ile işaretlenmişse doğrudan başlatılamaz. Ancak, modüller devralınabileceğinden Devralındığı için bir modülden hala farklılık vardır.

Not

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

Sınıflar ve modüller, üyeleri için farklı kapsamlar da kullanır. Bir sınıf içinde tanımlanan Üyeler, sınıfın belirli bir örneği içinde kapsamlandırılır ve yalnızca nesnenin ömrü için mevcuttur. Sınıf üyelerine bir sınıfın dışından erişmek için, nesne biçiminde tam nitelikli adlar kullanmanız gerekir. Üye.

Öte yandan, bir modül içinde bildirilen üyelere varsayılan olarak genel olarak erişilebilir ve modüle erişebilen herhangi bir kod tarafından erişilebilir. Bu, bir standart modüldeki değişkenlerin, projenizdeki herhangi bir yerden görünedikleri ve programın ömrü için mevcut olduğu için etkin olmayan genel değişkenler olduğu anlamına gelir.

Sınıfları ve nesneleri yeniden kullanma

Nesneler, değişkenleri ve yordamları bir kez bildirmenizi ve sonra gerektiğinde bunları yeniden kullanmayı 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 denetimcisini bir sınıf olarak oluşturursanız, derlenen derlemeye bir başvuru ekleyerek diğer uygulamalarda onu yeniden kullanabilirsiniz. Daha iyi bir şekilde, başka birinin zaten geliştirildiği bir yazım denetleyicisi sınıfını kullanarak kendi çalışmalarınızı kaydedebilirsiniz.

.NET, kullanıma açık olan bileşenlere birçok örnek sağlar. Aşağıdaki örnek, TimeZone System ad alanındaki sınıfını kullanır. TimeZone geçerli bilgisayar sisteminin saat dilimi hakkında bilgi almanıza izin veren Üyeler sağlar.

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

Önceki örnekte, ilk Dim ifadesinde , türünde bir nesne değişkeni TimeZone bildirilir ve bu nesneye TimeZone , özelliği tarafından döndürülen bir nesne atanır CurrentTimeZone .

Nesneler arasındaki ilişkiler

Nesneler birbirleriyle çeşitli yollarla ilişkili olabilir. Asıl ilişki türleri hiyerarşik ve kapsamlardır.

Hiyerarşik ilişki

Sınıflar daha temel sınıflardan türetildiklerinde 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çıklayarak yararlıdır.

Aşağıdaki örnekte, Button normal gibi davranan Button ve ayrıca ön plan ve arka plan renklerini tersine getiren bir yöntemi ortaya çıkaran özel bir tür tanımlamak istediğinizi varsayalım.

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

  1. İhtiyaç duyduğunuz nesnenin oluşturulacağı bir sınıf tanımlamak için bir Class ifadesini kullanın.

    Public Class ReversibleButton
    

    Bir End Class deyimin sınıfınıza ait son kod satırını takip ettiğinizden emin olun. Varsayılan olarak, tümleşik geliştirme ortamı (IDE) bir ifade girdiğinizde otomatik olarak bir üretir End Class Class .

  2. ClassBir Inherits ifadesiyleifadeyi hemen 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 sunduğu ek Üyeler için kodu 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 bir nesne oluşturursanız ReversibleButton , sınıfın tüm üyelerine Button ve ' ReverseColors de tanımladığınız diğer tüm yeni üyelere erişebilir ReversibleButton .

Türetilmiş sınıflar, bir sınıf hiyerarşisinde ilerlemeniz sırasında karmaşıklık eklemenize olanak sağlayan, temel alınan sınıftan üyeleri devralınır. Daha fazla bilgi için bkz. Devralma Temelleri.

Kodu derle

Derleyicinin yeni sınıfınızı türettiğiniz sınıfa erişip erişemeyeceğini unutmayın. Bu, önceki örnekte olduğu gibi adını tam olarak niteleyen veya Imports ifadesinde (.net ad alanı ve türü)ad alanını tanımlayan anlamına gelebilir. Sınıf farklı bir projem ise, bu projeye bir başvuru eklemeniz gerekebilir. Daha fazla bilgi için bkz. bir projedeki başvuruları yönetme.

Kapsama ilişkisi

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

Koleksiyonlar

Nesne kapsamaların belirli bir türü koleksiyonlar tarafından temsil edilir. Koleksiyonlar, numaralandırılabilir benzer nesne gruplarıdır. Visual Basic her biri için içindeki belirli bir sözdizimini destekler ... Bir koleksiyonun öğeleri arasında yineleme yapmanızı sağlayan Next bildirisi. Ayrıca, Koleksiyonlar genellikle Item[] öğelerini dizine göre almak için veya bunları benzersiz bir dizeyle ilişkilendirerek kullanmanıza izin verir. Koleksiyonlar, dizinleri kullanmadan öğeleri eklemenize veya kaldırmanıza izin verdiklerinden, dizilerden kullanımı 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ının nasıl oluşturulacağı 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 geçersiz kılmayı, MyClass ve MyBase 'yi içerir.

Nesne ömrü: nesneleri oluşturma ve yok etme
Sınıf örneklerinin oluşturulmasını ve elden atılanışını açıklar.

Anonim türler
Veri türü için bir sınıf tanımı yazmadan nesneler oluşturmanıza izin veren anonim türlerin nasıl oluşturulduğunu ve kullanıldığı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ürleri Çıkarçıkar
Anonim tür bildirimlerinde özellik adlarının ve türlerin nasıl çıkarılacağını açıklar. Başarılı ve başarısız çıkarım örneklerini sağlar.