Nesne odaklı programlama (Visual Basic)

Visual Basic kapsülleme, devralma ve polimorfizm gibi nesne odaklı programlama için tam destek sağlar.

Kapsülleme , bir grup ilgili özellik, yöntem ve diğer üyenin tek bir birim veya nesne olarak ele alınmaları anlamına gelir.

Devralma , var olan bir sınıfı temel alan yeni sınıflar oluşturma özelliğini açıklar.

Polimorfizm , her sınıf aynı özellikleri veya yöntemleri farklı şekillerde uygulasa bile birbirinin yerine kullanılabilecek birden çok sınıfa sahip olabileceğiniz anlamına gelir.

Bu bölümde aşağıdaki kavramlar açıklanmaktadır:

Sınıflar ve nesneler

Sınıf ve nesne terimleri bazen birbirinin yerine kullanılır, ancak aslında, sınıflar nesnelerin türünü açıklarken, nesneler sınıfların kullanılabilir örnekleridir. Bu nedenle, nesne oluşturma eylemine örnekleme adı verilir. Şema benzetmesi kullanıldığında sınıf bir şemadır ve nesne de bu şemadan oluşturulmuş bir yapıdır.

Sınıf tanımlamak için:

Class SampleClass
End Class

Visual Basic ayrıca, büyük bir nesne dizisi oluşturmanız gerektiğinde ve bunun için çok fazla bellek kullanmak istemediğinizde yararlı olan yapılar olarak adlandırılan basit bir sınıf sürümü sağlar.

Bir yapı tanımlamak için:

Structure SampleStructure
End Structure

Daha fazla bilgi için bkz.

Sınıf üyeleri

Her sınıf, sınıf verilerini açıklayan özellikler, sınıf davranışını tanımlayan yöntemler ve farklı sınıflar ve nesneler arasında iletişim sağlayan olaylar içeren farklı sınıf üyelerine sahip olabilir.

Özellikler ve alanlar

Alanlar ve özellikler, bir nesnenin içerdiği bilgileri gösterir. Alanlar, doğrudan okunabileceği veya ayarlanabildiği için değişkenlere benzer.

Alan tanımlamak için:

Class SampleClass
    Public SampleField As String
End Class

Özelliklerin, değerlerin nasıl ayarlandığı veya döndürüldiği üzerinde daha fazla denetim sağlayan get ve set yordamları vardır.

Visual Basic, özellik değerini depolamak için özel bir alan oluşturmanıza veya bu alanı arka planda otomatik olarak oluşturan ve özellik yordamları için temel mantığı sağlayan otomatik olarak uygulanan özellikler kullanmanıza olanak tanır.

Otomatik olarak uygulanan bir özelliği tanımlamak için:

Class SampleClass
    Public Property SampleProperty as String
End Class

Özellik değerini okumak ve yazmak için bazı ek işlemler gerçekleştirmeniz gerekiyorsa, özellik değerini depolamak için bir alan tanımlayın ve bunu depolamak ve almak için temel mantığı sağlayın:

Class SampleClass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class

Çoğu özelliğin hem ayarlayıp hem de özellik değerini almak için yöntemleri veya yordamları vardır. Ancak, değiştirilmesini veya okunmasını kısıtlamak için salt okunur veya salt yazma özellikleri oluşturabilirsiniz. Visual Basic'te ve WriteOnly anahtar sözcüklerini kullanabilirsinizReadOnly. Ancak, otomatik olarak uygulanan özellikler salt okunur veya salt okunur olamaz.

Daha fazla bilgi için bkz.

Yöntemler

Yöntem, bir nesnenin gerçekleştirebileceği bir eylemdir.

Not

Visual Basic'te yöntem oluşturmanın Sub iki yolu vardır: yöntem bir değer döndürmezse deyimi kullanılır; Function yöntem bir değer döndürürse deyimi kullanılır.

Bir sınıfın yöntemini tanımlamak için:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class

Bir sınıf, parametre sayısından veya parametre türünden farklı olan aynı yöntemin çeşitli uygulamalarına veya aşırı yüklemelerine sahip olabilir.

Bir yöntemi aşırı yüklemek için:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub

Çoğu durumda bir sınıf tanımı içinde bir yöntem bildirirsiniz. Ancak Visual Basic, mevcut bir sınıfa sınıfın gerçek tanımının dışında yöntemler eklemenize olanak sağlayan uzantı yöntemlerini de destekler.

Daha fazla bilgi için bkz.

Oluşturucular

Oluşturucular, belirli bir türe sahip bir nesne oluşturulduğunda otomatik olarak yürütülen sınıf yöntemleridir. Oluşturucular genellikle yeni nesnenin veri üyelerini başlatır. Bir oluşturucu, bir sınıf oluşturulduğunda yalnızca bir kez çalıştırılabilir. Ayrıca, oluşturucudaki kod her zaman bir sınıftaki diğer koddan önce çalışır. Ancak, başka bir yöntemle aynı şekilde birden çok oluşturucu aşırı yüklemesi oluşturabilirsiniz.

Bir sınıf için oluşturucu tanımlamak için:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class

Daha fazla bilgi için bkz. Nesne Ömrü: Nesneler Nasıl Oluşturulur ve Yok Edilir.

Yıkıcılar

Yıkıcılar sınıfların örneklerini yok etmek için kullanılır. .NET Framework'te çöp toplayıcı, uygulamanızdaki yönetilen nesneler için bellek ayırmayı ve serbest bırakma işlemini otomatik olarak yönetir. Ancak uygulamanızın oluşturduğu yönetilmeyen kaynakları temizlemek için yine de yıkıcılara ihtiyacınız olabilir. Bir sınıf için yalnızca bir yıkıcı olabilir.

.NET Framework'te yıkıcılar ve çöp toplama hakkında daha fazla bilgi için bkz . Çöp Toplama.

Ekinlikler

Olaylar, bir sınıfın veya nesnenin ilgi çekici bir şey olduğunda diğer sınıflara veya nesnelere bildirim göndermesini sağlar. Olayı gönderen (veya yükselten) sınıf yayımcı olarak adlandırılır ve olayı alan (veya işleyen) sınıflar abone olarak adlandırılır. Olaylar, bunların nasıl yükseltilip işlenmeleri hakkında daha fazla bilgi için bkz . Olaylar.

  • Olayları bildirmek için Olay Deyimi'ni kullanın.

  • Olayları yükseltmek için RaiseEvent Deyimi'ni kullanın.

  • Bildirim temelli bir yöntem kullanarak olay işleyicilerini belirtmek için WithEvents deyimini ve Handles yan tümcesini kullanın.

  • Bir olayla ilişkili olay işleyicisini dinamik olarak ekleyebilmek, kaldırabilmek ve değiştirebilmek için AddHandler Deyimini ve RemoveHandler Deyimini AddressOf İşleci ile birlikte kullanın.

İç içe sınıflar

Başka bir sınıf içinde tanımlanan bir sınıf iç içe olarak adlandırılır. Varsayılan olarak iç içe geçmiş sınıf özeldir.

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class

İç içe sınıfın bir örneğini oluşturmak için kapsayıcı sınıfının adını, ardından nokta ve ardından iç içe sınıfın adını kullanın:

Dim nestedInstance As Container.Nested = New Container.Nested()

Erişim değiştiricileri ve erişim düzeyleri

Tüm sınıflar ve sınıf üyeleri, erişim değiştiricilerini kullanarak diğer sınıflara hangi erişim düzeyini sağladıklarını belirtebilir.

Aşağıdaki erişim değiştiricileri kullanılabilir:

Visual Basic Değiştiricisi Tanım
Public Türe veya üyeye, aynı derlemedeki başka bir kod veya buna başvuran başka bir derleme tarafından erişilebilir.
Private Türe veya üyeye yalnızca aynı sınıftaki kod tarafından erişilebilir.
Protected Türe veya üyeye yalnızca aynı sınıftaki veya türetilmiş bir sınıftaki kod tarafından erişilebilir.
Friend Türe veya üyeye aynı derlemedeki herhangi bir kod tarafından erişilebilir, ancak başka bir derlemeden erişemez.
Protected Friend Türe veya üyeye aynı derlemedeki herhangi bir kod veya başka bir derlemedeki türetilmiş sınıflar tarafından erişilebilir.

Daha fazla bilgi için bkz . Visual Basic'te erişim düzeyleri.

Sınıfların örneğini oluşturma

Nesne oluşturmak için bir sınıf örneği oluşturmanız veya bir sınıf örneği oluşturmanız gerekir.

Dim sampleObject as New SampleClass()

Bir sınıfın örneğini örnekledikten sonra, örneğin özelliklerine ve alanlarına değerler atayabilir ve sınıf yöntemlerini çağırabilirsiniz.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()

Sınıf örneği oluşturma işlemi sırasında özelliklere değer atamak için nesne başlatıcılarını kullanın:

Dim sampleObject = New SampleClass With
    {.FirstProperty = "A", .SecondProperty = "B"}

Daha fazla bilgi için bkz.

Paylaşılan sınıflar ve üyeler

Sınıfın paylaşılan üyesi, sınıfın tüm örnekleri tarafından paylaşılan bir özellik, yordam veya alantır.

Paylaşılan üye tanımlamak için:

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class

Paylaşılan üyeye erişmek için, bu sınıfın nesnesini oluşturmadan sınıfın adını kullanın:

MsgBox(SampleClass.SampleString)

Visual Basic'teki paylaşılan modüller yalnızca paylaşılan üyelere sahiptir ve örneği oluşturulamaz. Paylaşılan üyeler paylaşılmayan özelliklere, alanlara veya yöntemlere de erişemez

Daha fazla bilgi için bkz.

Anonim türler

Anonim türler, veri türü için sınıf tanımı yazmadan nesneler oluşturmanıza olanak tanır. Bunun yerine, derleyici sizin için bir sınıf oluşturur. sınıfının kullanılabilir bir adı yoktur ve nesnesini bildirirken belirttiğiniz özellikleri içerir.

Anonim bir türün örneğini oluşturmak için:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}

Daha fazla bilgi için bkz. Anonim Türler.

Devralma

Devralma, başka bir sınıfta tanımlanan davranışı yeniden kullanan, genişleten ve değiştiren yeni bir sınıf oluşturmanıza olanak tanır. Üyeleri devralınan sınıfa temel sınıf, bu üyeleri devralan sınıf ise türetilmiş sınıf olarak adlandırılır. Ancak, Visual Basic'teki tüm sınıflar .NET sınıf hiyerarşisini Object destekleyen ve tüm sınıflara alt düzey hizmetler sağlayan sınıftan örtük olarak devralır.

Not

Visual Basic birden çok devralmayı desteklemez. Başka bir ifadeyle, türetilmiş bir sınıf için yalnızca bir temel sınıf belirtebilirsiniz.

Temel sınıftan devralmak için:

Class DerivedClass
    Inherits BaseClass
End Class

Varsayılan olarak tüm sınıflar devralınabilir. Ancak, bir sınıfın temel sınıf olarak kullanılmaması gerektiğini belirtebilir veya yalnızca temel sınıf olarak kullanılabilecek bir sınıf oluşturabilirsiniz.

Bir sınıfın temel sınıf olarak kullanılamayacağını belirtmek için:

NotInheritable Class SampleClass
End Class

Bir sınıfın yalnızca temel sınıf olarak kullanılabileceğini ve örneği oluşturulamayacağını belirtmek için:

MustInherit Class BaseClass
End Class

Daha fazla bilgi için bkz.

Üyeleri geçersiz kılma

Varsayılan olarak, türetilmiş bir sınıf temel sınıfından tüm üyeleri devralır. Devralınan üyenin davranışını değiştirmek istiyorsanız, bunu geçersiz kılmanız gerekir. Diğer bir ifadeyle, türetilmiş sınıfta yönteminin, özelliğinin veya olayının yeni bir uygulamasını tanımlayabilirsiniz.

Özelliklerin ve yöntemlerin nasıl geçersiz kılınmasını denetlemek için aşağıdaki değiştiriciler kullanılır:

Visual Basic Değiştiricisi Tanım
Overridable Sınıf üyesinin türetilmiş bir sınıfta geçersiz kılınmasına izin verir.
Overrides Temel sınıfta tanımlanan bir sanal (geçersiz kılınabilir) üyeyi geçersiz kılar.
NotOverridable Devralan bir sınıfta bir üyenin geçersiz kılınmasını engeller.
MustOverride Türetilmiş sınıfta bir sınıf üyesinin geçersiz kılınmasını gerektirir.
Shadows Temel sınıftan devralınan bir üyeyi gizler

Arabirimler

Sınıflar gibi arabirimler bir özellik, yöntem ve olay kümesi tanımlar. Ancak sınıflardan farklı olarak, arabirimler uygulama sağlamaz. Sınıflar tarafından uygulanır ve sınıflardan ayrı varlıklar olarak tanımlanır. Arabirim, bir arabirimi uygulayan bir sınıfın bu arabirimin her yönünü tam olarak tanımlandığı gibi uygulaması gerektiği bir sözleşmeyi temsil eder.

Arabirim tanımlamak için:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface

Bir sınıfta arabirim uygulamak için:

Class SampleClass
    Implements ISampleInterface
    Sub DoSomething
        ' Method implementation.
    End Sub
End Class

Daha fazla bilgi için bkz.

Genel Türler

.NET'teki sınıflar, yapılar, arabirimler ve yöntemler, depoladıkları veya kullanabilecekleri nesne türlerini tanımlayan tür parametreleri içerebilir. Genel türlerin en yaygın örneği, koleksiyonda depolanacak nesne türünü belirtebileceğiniz bir koleksiyondur.

Genel bir sınıf tanımlamak için:

Class SampleGeneric(Of T)
    Public Field As T
End Class

Genel bir sınıfın örneğini oluşturmak için:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"

Daha fazla bilgi için bkz.

Temsilciler

Temsilci, yöntem imzasını tanımlayan bir türdür ve uyumlu imzaya sahip herhangi bir yönteme başvuru sağlayabilir. Yöntemini temsilci aracılığıyla çağırabilirsiniz (veya çağırabilirsiniz). Temsilciler, yöntemleri bağımsız değişkenler olarak diğer yöntemlere geçirmek için kullanılır.

Not

Olay işleyicileri, temsilciler aracılığıyla çağrılan yöntemlerden başka bir şey değildir. Olay işlemede temsilcileri kullanma hakkında daha fazla bilgi için bkz . Olaylar.

Temsilci oluşturmak için:

Delegate Sub SampleDelegate(ByVal str As String)

Temsilci tarafından belirtilen imzayla eşleşen bir yönteme başvuru oluşturmak için:

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class

Daha fazla bilgi için bkz.

Ayrıca bkz.