Nesne Odaklı Programlama (C# ve Visual Basic)
Visual Basic ve C# gibi, .NET Framework'de yönetilen tüm diller; kapsülleme, devralma ve çok biçimlilik dahil, nesne yönelimli programlama için tam destek sağlar.
Kapsülleme, bir ilişkili özellikler, yöntemler veya diğer öğeler grubunun, tek bir birim veya nesne olarak işlem gördüğü anlamına gelir.
Devralma mevcut bir sınıfı temel alan yeni sınıflar oluşturma becerisidir.
Çok biçimlilik, her sınıf aynı özellikleri veya yöntemleri farklı şekilde uygulasa da birbirinin yerine kullanılabilen birden fazla sınıfınız olabileceği anlamına gelir.
Bu bölüm aşağıdaki kavramları açıklar:
Sınıflar ve Nesneler
Sınıf Üyeleri
Özellikler ve Alanlar
Yöntemler
Oluşturucular
Yıkıcılar
Olaylar
İç İçe Sınıflar
Değiştiricilere ve Erişim Düzeylerine Erişim
Sınıf Oluşturma
Statik (Paylaşılan) Sınıflar ve Üyeleri
Anonim Türler
Kalıtım
- Üyeleri Geçersiz Kılma
Arayüzler
Genel Türler
Temsilciler
Sınıflar ve Nesneler
Sınıf ve nesne terimleri bazen birbirlerinin yerine kullanılabilir fakat aslında nesneler sınıfların kullanılabilir örnekleri iken, sınıflar nesnelerin türünü açıklar.Bu nedenle bir nesne oluşturma işlemine örnekleme denir.Plan benzerliği kullanıldığında, bir sınıf plandır ve nesne, o planla yapılan bir binadır.
Sınıf tanımlamak için:
Class SampleClass
End Class
class SampleClass
{
}
Visual Basic ve C# ayrıca, büyük bir nesneler dizisi oluşturmanız gerektiğinde ve bunun için çok fazla bellek harcamak istemediniz durumlarda faydalı olacak, yapılar adı verilen hafif bir sınıflar sürümü sağlar.
Yapı tanımlamak için:
Structure SampleStructure
End Structure
struct SampleStruct
{
}
Daha fazla bilgi için bkz:
Visual Basic
C#
Sınıf Üyeleri
Her sınıf, sınıf verilerini, sınıf davranışını tanımlayan yöntemleri ve farklı sınıflar ve nesneler arasındaki iletişimi sağlayan olayları tanımlayan, farklı sınıf üyeleri içerebilir.
Özellikler ve Alanlar
Alanlar ve özellikler bir nesnenin içerdiği bilgileri temsil eder.Alanlar, okunabilir ve doğrudan ayarlanabilir olduklarından değişkenlere benzer.
Alan tanımlamak için:
Class SampleClass
Public SampleField As String
End Class
Class SampleClass
{
public string sampleField;
}
Özellikler, değerlerin nasıl ayarlanacağı veya döndürüleceği konusunda daha fazla denetim sağlayan get ve set yordamlarını içerir.
C# ve Visual Basic kullanarak; özellik değerini depolamak üzere özel bir alan oluşturabilir; veya bu alanı arka planda otomatik olarak oluşturan ve özellik yordamları için temel mantığı sağlayan, otomatik uygulamalı olarak anılan özellikleri kullanabilirsiniz.
Otomatik uygulanan bir özellik tanımlamak için:
Class SampleClass
Public Property SampleProperty as String
End Class
class SampleClass
{
public int SampleProperty { get; set; }
}
Okuma ve yazma özellik değeri için bazı ek işlemler gerçekleştirmeniz gerekiyorsa, özellik değerini depolamak için bir alan tanımlayın ve depolanması ve alınması için gereken mantığı sağlayın:
Class Samplelass
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
class SampleClass
{
private int _sample;
public int Sample
{
// Return the value stored in a field.
get { return _sample; }
// Store the value in the field.
set { _sample = value; }
}
}
Özelliklerin çoğu özellik değerini ayarlamak ve almak için yöntemlere ve yordamlara sahiptir.Ancak değiştirilmelerini veya okunmalarını kısıtlamak için salt okunur veya salt yazılır özellikler oluşturabilirsiniz.Visual Basic'te ReadOnly ve WriteOnly anahtar sözcüklerini kullanabilirsiniz.C# dilinde, get veya set özellik yöntemini yoksayabilirsiniz.Ancak Visual Basic ve C# içinde otomatik olarak uygulanan özellikler salt okunur veya salt yazılır olamaz.
Daha fazla bilgi için bkz:
Visual Basic
C#
Yöntemler
yöntem, nesnenin gerçekleştirebileceği bir eylemdir.
[!NOT]
Visual Basic'te, bir yöntem oluşturmanın iki yolu vardır: yöntem bir değer döndürmezse Sub deyimi; yöntem bir değer döndürürse Function 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
class SampleClass
{
public int sampleMethod(string sampleParam)
{
// Insert code here
}
}
Bir sınıfta, parametre sayıları veya parametre türleri farklı olan aynı yönteme ilişkin çeşitli uygulamalar veya aşırı yüklemeler 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
public int sampleMethod(string sampleParam) {};
public int sampleMethod(int sampleParam) {}
Çoğu durumda, sınıf tanımında bir yöntem bildirirsiniz.Ancak Visual Basic ve C# aynı zamanda mevcut sınıfa, sınıfın gerçek tanımı dışında kalan yöntemler eklemenize olanak tanıyan genişletme yöntemlerini destekler.
Daha fazla bilgi için bkz:
Visual Basic
C#
Oluşturucular
Oluşturucular, belirli bir türde nesne oluşturulduğunda otomatik olarak yürütülen sınıf yöntemleridir.Kurucular genellikle yeni nesnenin veri öğelerini başlatır.Bir sınıf oluşturulduğunda oluşturucu yalnızca bir kez çalıştırılabilir.Ayrıca, oluşturucudaki kod her zaman sınıf içindeki diğer kodlardan daha önce çalışır.Ancak, diğer herhangi bir yöntemde olduğu gibi birden fazla oluşturucu yükü oluşturabilirsiniz.
Bir sınıf için bir kurucu tanımlamak üzere:
Class SampleClass
Sub New(ByVal s As String)
// Add code here.
End Sub
End Class
public class SampleClass
{
public SampleClass()
{
// Add code here
}
}
Daha fazla bilgi için bkz:
Visual Basic
C#
Yıkıcılar
Yıkıcılar, sınıfların örneklerini yok etmek üzere kullanılır..NET Framework'te çöp toplayıcı, uygulamanızda yönetilen nesneler için bellek sağlanmasını ve ayrılmasını otomatik olarak yönetir.Ancak, uygulamanız tarafından oluşturulan yönetilmeyen kaynakları temizlemek için yine de yok edicilere ihtiyacınız olabilir.Bir sınıf için yalnızca bir yıkıcı olabilir.
.NET Framework'teki yok ediciler ve çöp toplama hakkında daha fazla bilgi için bkz. Çöp Toplama.
Olaylar
Olaylar, ilgi çekici bir durum oluştuğunda diğer sınıfları veya nesneleri uyaran bir sınıf veya nesneyi etkinleştirir.Etkinliği gönderen (veya harekete geçiren) sınıf yayımcı olarak adlandırılır ve etkinliği alan (veya işleyen) sınıflar aboneler olarak adlandırılır.Olaylar, nasıl oluştukları ve işlendikleri hakkında daha fazla bilgi için bkz. Olaylar Oluşturma ve İşleme.
Visual Basic
Olayları bildirmek için Event Deyimi kullanın.
Olayları yükseltmek için RaiseEvent Deyimi kullanın.
Bildirim kullanarak olay işleyicileri belirtmek için WithEvents (Visual Basic) deyimini ve Handles Tümcesi (Visual Basic) yan tümcesini kullanın.
Etkinlikle ilişkili olay işleyicisini dinamik olarak eklemek, kaldırmak ve değiştirmek için AddHandler Deyimi ve RemoveHandler Deyimi öğelerini AddressOf İşleci (Visual Basic) ile birlikte kullanın.
C#
Bir sınıf içinde olay bildirmek için event (C# Başvurusu) anahtar sözcüğünü kullanın.
Bir olayı yükseltmek için olay temsilcisini çağırın.
Bir olaya abone olmak için += işlecini kullanın; bir olayın aboneliğini kaldırmak için -= işlecini kullanın.
İç İçe Sınıflar
Başka bir sınıfla tanımlanmış bir sınıf iç içe olarak adlandırılır.Varsayılan olarak, iç içe geçmiş özel sınıftır.
Class Container
Class Nested
' Add code here.
End Class
End Class
class Container
{
class Nested
{
// Add code here.
}
}
İç içe geçmiş sınıfının bir örneğini oluşturmak için kapsayıcı sınıfının arkasına bir nokta koyun ve sonra iç içe geçmiş sınıf adını kullanın:
Dim nestedInstance As Container.Nested = New Container.Nested()
Container.Nested nestedInstance = new Container.Nested()
Değiştiricilere ve Erişim Düzeylerine Erişim
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ğlayacaklarını belirleyebilir.
Aşağıdaki erişim değiştiriciler kullanılabilir:
Visual Basic Değiştiricisi |
C# Değiştiricisi |
Tanım |
---|---|---|
Türe veya üyeye aynı derlemedeki kod ile veya başvuran bir derlemeyle erişim sağlanabilir. |
||
Türe veya üyeye aynı sınıftaki kod ile erişim sağlanabilir. |
||
Türe veya üyeye aynı sınıftaki veya türetilmiş bir sınıftaki kod ile erişim sağlanabilir. |
||
Türe veya üyeye aynı derlemedeki kod ile erişim sağlanabilir ancak farklı derlemeyle sağlanamaz. |
||
Protected Friend |
protected internal |
Türe veya üyeye aynı derlemedeki kod ile veya başka bir derlemedeki türetilmiş sınıfla erişim sağlanabilir. |
Daha fazla bilgi için, bkz. Visual Basic'de Erişim Düzeyleri ve Erişim Değiştiricileri (C# Programlama Kılavuzu).
Sınıf Oluşturma
Bir nesne oluşturmak için bir sınıf örneği başlatmanız veya sınıf örneği oluşturmanız gerekir.
Dim sampleObject as New SampleClass()
SampleClass sampleObject = new SampleClass();
Bir sınıf başlatıldıktan sonra örneğin özelliklerine ve alanlarına değerler atayabilir, sınıf yöntemini çağırabilirsiniz.
' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
// Set a property value.
sampleObject.sampleProperty = "Sample String";
// Call a method.
sampleObject.sampleMethod();
Sınıf örnekleme işlemi sırasında özelliklere değerler atamak için nesne başlatıcıları kullanın:
Dim sampleObject = New SampleClass With
{.FirstProperty = "A", .SecondProperty = "B"}
// Set a property value.
SampleClass sampleObject = new SampleClass
{ FirstProperty = "A", SecondProperty = "B" };
Daha fazla bilgi için bkz:
Visual Basic
C#
Statik (Paylaşılan) Sınıflar ve Üyeleri
Sınıfın statik (Visual Basic'te paylaşılan) üyesi, bir sınıfın tüm örnekleri tarafından paylaşılan bir özellik, yordam veya alandır.
(Paylaşılan) statik bir üye tanımlamak için:
Class SampleClass
Public Shared SampleString As String = "Sample String"
End Class
static class SampleClass
{
public static string SampleString = "Sample String";
}
Statik (paylaşılan) üyeye erişmek için sınıfın adını sınıf nesnesi oluşturmadan kullanın:
MsgBox(SampleClass.SampleString)
Console.WriteLine(SampleClass.SampleString);
C#'deki statik (paylaşılan) sınıflar ve Visual Basic'deki modüller yalnızca statik (paylaşılan) üyelere sahiptir ve örnekleri oluşturulamaz.Ayrıca statik (paylaşılan) üyeler statik olmayan (paylaşılmayan) özelliklere, alanlara veya yöntemlere erişemez.
Daha fazla bilgi için bkz:
Visual Basic
C#
Anonim Türler
Anonim türler, veri türü için bir sınıf tanımı yazmaksızın nesneleri oluşturmanızı sağlar.Bunun yerine derleyici sizin için bir sınıf oluşturur.Sınıfın kullanılabilir adı yok ve nesneyi bildirirken belirttiğiniz özellikleri içeriyor.
Anonim türünün bir örneğini oluşturmak için:
' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
New With {Key .FirstProperty = "A", .SecondProperty = "B"}
// sampleObject is an instance of a simple anonymous type.
var sampleObject =
new { FirstProperty = "A", SecondProperty = "B" };
Daha fazla bilgi için bkz:
Visual Basic: Anonim Türleri (Visual Basic)
Kalıtım
Devralma, başka bir sınıfta tanımlanan davranışı yeniden kullanan, genişleten ve değiştiren yeni sınıflar oluşturmanıza olanak sağlar.Üyeleri devralınan sınıf taban sınıf ve bu üyeleri devralan sınıf türetilmiş sınıf olarak adlandırılır.Ancak C# ve Visual Basic içindeki tüm sınıflar örtük olarak, .NET sınıf hiyerarşisini destekleyen ve tüm sınıflara alt düzey hizmetler sunan Object sınıfından devralır.
[!NOT]
.NET Framework'te yönetilen diller birden çok devralmayı desteklemez yani, derlenen bir sınıf için yalnızca bir temel sınıf belirtebilirsiniz.
Bir temel sınıfından devralmak için:
Class DerivedClass
Inherits BaseClass
End Class
class DerivedClass:BaseClass{}
Varsayılan olarak, tüm sınıflar devralınabilir.Ancak temel sınıfta bir sınıfın kullanılıp kullanılmayacağını belirtebilirsiniz veya yalnızca temel sınıf olarak kullanılacak 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
public sealed class A { }
Yalnızca temel sınıf olarak kullanılabilecek ve başlatılamayacak bir sınıf belirtmek için:
MustInherit Class BaseClass
End Class
public abstract class B { }
Daha fazla bilgi için bkz:
Visual Basic
C#
Üyeleri Geçersiz Kılma
Varsayılan olarak, türetilmiş bir sınıf tüm üyelerini kendi temel sınıfından devralır.Devralınan üye davranışını değiştirmek istiyorsanız, onu geçersiz kılmanız gerekir.Diğer bir deyişle, türetilmiş bir sınıf içindeki yöntemin, özelliğin veya olayın yeni bir uygulamasını tanımlayabilirsiniz.
Özelliklerin ve yöntemlerin nasıl geçersiz kılınacağını denetlemek için aşağıdaki değiştiriciler kullanılır:
Visual Basic Değiştiricisi |
C# Değiştiricisi |
Tanım |
---|---|---|
Sınıf üyesinin türetilmiş bir sınıf tarafından geçersiz kılınmasına izin verir. |
||
Temel sınıfta tanımlanan sanal bir (geçersiz kılınabilir) üyeyi geçersiz kılar. |
||
Desteklenmiyor |
Devralınan bir sınıfta bir üyenin geçersiz kılınmasını önler. |
|
Bir sınıf üyesinin derlenen sınıfta geçersiz kılınması gerekir. |
||
Temel sınıftan devralınan üyeyi gizler |
Arayüzler
Sınıflar gibi arabirimler bir özellik kümesi, yöntemler ve olaylar tanımlar.Ancak sınıflardan farklı olarak, arabirimler uygulama sağlamaz.Bunlar sınıflara göre uygulanır ve sınıflardan ayrı varlıklar olarak tanımlanır.Bir arabirim bir sözleşmeyi temsil eder, başka deyişle bir arabirimi uygulayan sınıf, o arabirimi her yönüyle, tam olarak tanımlandığı şekliyle uygulamalıdır.
Arabirim tanımlamak için:
Public Interface ISampleInterface
Sub DoSomething()
End Interface
interface ISampleInterface
{
void doSomething();
}
Bir sınıf içinde arabirim uygulamak için:
Class SampleClass
Implements ISampleInterface
Sub DoSomething
' Method implementation.
End Sub
End Class
class SampleClass : ISampleInterface
{
void ISampleInterface.doSomething()
{
// Method implementation.
}
}
Daha fazla bilgi için bkz:
Visual Basic
C#
Genel Türler
.NET Framework'deki sınıflar, yapılar, arabirimler ve yöntemler depolayabildikleri veya kullanabildikleri nesnelerin türlerini tanımlayan tür parametreleri içerebilir.Genel türlerin en yaygın örneği, bir koleksiyonda depolanacak nesnelerin türünü belirleyebileceğiniz bir koleksiyondur.
Genel bir sınıf tanımlamak için:
Class SampleGeneric(Of T)
Public Field As T
End Class
Public class SampleGeneric<T>
{
public T Field;
}
Genel bir sınıfın örneğini oluşturmak için:
Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
SampleGeneric<string> sampleObject = new SampleGeneric<string>();
sampleObject.Field = "Sample string";
Daha fazla bilgi için bkz:
Temsilciler
Temsil, yöntem imzasını tanımlayan bir türdür ve uyumlu imzaya sahip tüm yöntemlere başvuru sağlar.Yöntemi temsilci aracılığıyla çağırabilirsiniz.Temsilciler, yöntemleri diğer yöntemlere bağımsız değişken olarak 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.Temsilcileri olay işlemede kullanma hakkında daha fazla bilgi için bkz. Olaylar Oluşturma ve İşleme.
Temsilci oluşturmak için:
Delegate Sub SampleDelegate(ByVal str As String)
public delegate void SampleDelegate(string str);
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
class SampleClass
{
// Method that matches the SampleDelegate signature.
public static void sampleMethod(string message)
{
// Add code here.
}
// Method that instantiates the delegate.
void SampleDelegate()
{
SampleDelegate sd = sampleMethod;
sd("Sample string");
}
}
Daha fazla bilgi için bkz:
Visual Basic
C#