Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
19m 59s
C#'ta soyut sınıflar, genellikle geliştiriciler arasında sorulara neden olan temel bir kavramdır. Tim Corey'in videosunda, "C# Soyut Sınıflar - Onlar Nedir, Nasıl Kullanılırlar ve En İyi Uygulamalar" Tim Corey soyut sınıfların ne olduğunu, nasıl kullanılacağını ve en iyi uygulamalarını ele alıyor. Bu makale, videosunun önemli noktalarını zaman damgalarını referans olarak kullanarak özetlemektedir.
Tim (0:00) soyut sınıfların amaçları, işlevselliği ve önemi açısından genellikle sorgulandığını açıklar. Soyut bir sınıfı, işlevsellik açısından tam bir temel sınıf ile bir arayüz arasında yer alan bir karışım olarak tanımlar.
(0:59'da), Tim soyut sınıfları göstermek için bir demo uygulaması sunar. Uygulama, bir konsol uygulaması ve veritabanı işlemlerini simüle eden iki veri erişim sınıfı içeren bir sınıf kütüphanesinden oluşur. Bu sınıfların, soyut sınıflar, temel sınıflar ve arayüzler arasındaki benzerlikleri ve farkları göstermek için Tim tarafından kullanılan veri yükleme ve saklama için yöntemleri vardır.
İşte temel sınıf ve türeyen sınıflar için başlangıç kodu:
// Base Class Definition
public class DataAccess
{
// Method to load the connection string
public string LoadConnectionString()
{
Console.WriteLine("Loading the connection string...");
return "Test Connection String";
}
// Method to load data
public void LoadData()
{
Console.WriteLine("Loading data...");
}
// Method to save data
public void SaveData()
{
Console.WriteLine("Saving data...");
}
}
// Derived class that inherits from DataAccess
public class SQLDataAccess : DataAccess
{
// Overriding LoadData method to specify SQL data loading
public new void LoadData()
{
Console.WriteLine("Loading SQL data...");
}
// Overriding SaveData method to specify SQL data saving
public new void SaveData()
{
Console.WriteLine("Saving SQL data...");
}
}
// Derived class that inherits from DataAccess
public class SQLiteDataAccess : DataAccess
{
// Overriding LoadData method to specify SQLite data loading
public new void LoadData()
{
Console.WriteLine("Loading SQLite data...");
}
// Overriding SaveData method to specify SQLite data saving
public new void SaveData()
{
Console.WriteLine("Saving SQLite data...");
}
}' Base Class Definition
Public Class DataAccess
' Method to load the connection string
Public Function LoadConnectionString() As String
Console.WriteLine("Loading the connection string...")
Return "Test Connection String"
End Function
' Method to load data
Public Sub LoadData()
Console.WriteLine("Loading data...")
End Sub
' Method to save data
Public Sub SaveData()
Console.WriteLine("Saving data...")
End Sub
End Class
' Derived class that inherits from DataAccess
Public Class SQLDataAccess
Inherits DataAccess
' Overriding LoadData method to specify SQL data loading
Public Shadows Sub LoadData()
Console.WriteLine("Loading SQL data...")
End Sub
' Overriding SaveData method to specify SQL data saving
Public Shadows Sub SaveData()
Console.WriteLine("Saving SQL data...")
End Sub
End Class
' Derived class that inherits from DataAccess
Public Class SQLiteDataAccess
Inherits DataAccess
' Overriding LoadData method to specify SQLite data loading
Public Shadows Sub LoadData()
Console.WriteLine("Loading SQLite data...")
End Sub
' Overriding SaveData method to specify SQLite data saving
Public Shadows Sub SaveData()
Console.WriteLine("Saving SQLite data...")
End Sub
End ClassTim, (3:21'de) bir temel sınıf nasıl oluşturulur açıklıyor. Ortalanmış metodlari, LoadConnectionString gibi, DataAccess adlı bir temel sınıfa taşımak için kodu yeniden düzenler. Bu temel sınıftan türeyen, SQLDataAccess ve SQLiteDataAccess gibi diğer sınıflar, kod yinelenmesini azaltarak bu ortak yöntemlere erişim kazanır.
(5:56'da) Tim temel sınıfı bir soyut sınıf haline getiriyor ve farklılıkları göstermek için. DataAccess'yi soyut bir sınıfa dönüştürerek, doğrudan örneklenmesini engeller. Bunun yerine, yalnızca SQLiteDataAccess ve SQLDataAccess gibi bu soyut sınıfı miras alan sınıflar, yöntemlerini uygulayabilir ve paylaşılan işlevselliğini kullanabilir.
İşte DataAccess soyut bir sınıfa dönüştüğünde kodda nasıl değişiklikler olur:
// Abstract Base Class Definition
public abstract class AbstractDataAccess
{
// Shared method to load connection string
public string LoadConnectionString()
{
Console.WriteLine("Loading the connection string...");
return "Test Connection String";
}
// Abstract methods that must be implemented by derived classes
public abstract void LoadData();
public abstract void SaveData();
}' Abstract Base Class Definition
Public MustInherit Class AbstractDataAccess
' Shared method to load connection string
Public Function LoadConnectionString() As String
Console.WriteLine("Loading the connection string...")
Return "Test Connection String"
End Function
' Abstract methods that must be implemented by derived classes
Public MustOverride Sub LoadData()
Public MustOverride Sub SaveData()
End ClassTim, (8:34'te) soyut sınıfların arayüzler ve temel sınıfların özelliklerini nasıl harmanladığını açıklar. public abstract void LoadData(); ve public abstract void SaveData(); gibi soyut yöntemleri, soyut sınıfta implemente etmeden beyan eder. Bu, herhangi bir türeyen sınıfın bu yöntemleri uygulamasını zorunlu kılar, arayüzlerin çalışma şekline benzer.
Tim, (12:56'da) bir soyut sınıfta yöntemlerin nasıl üzerine yazılacağını tartışıyor. Ana sınıfta bir metodu virtual olarak beyan edebileceğinizi, türetilen sınıfların onu geçersiz kılmasına olanak tanıdığını gösterir. Bu yaklaşım, yöntemlerin türetilmiş sınıflarda nasıl uygulandığı ve genişletildiği konusunda esneklik sağlar.
İşte yöntem üzerine yazmalarını gösteren türetilmiş sınıf kodu:
// Derived class from abstract base class
public class SQLDataAccessWithAbstract : AbstractDataAccess
{
// Implementing the abstract LoadData method
public override void LoadData()
{
Console.WriteLine("Loading SQL data...");
}
// Implementing the abstract SaveData method
public override void SaveData()
{
Console.WriteLine("Saving SQL data...");
}
}' Derived class from abstract base class
Public Class SQLDataAccessWithAbstract
Inherits AbstractDataAccess
' Implementing the abstract LoadData method
Public Overrides Sub LoadData()
Console.WriteLine("Loading SQL data...")
End Sub
' Implementing the abstract SaveData method
Public Overrides Sub SaveData()
Console.WriteLine("Saving SQL data...")
End Sub
End ClassTim, (16:01'de) soyut sınıfların her gün kullanılmaması gerektiğini ancak belirli senaryolarda değerli olduklarını tavsiye eder. İki sınıf benzer koda sahip olduğu için soyut sınıfların kullanılmaması konusunda uyarıda bulunur. Bunun yerine, 'is a' ilişkisinin sürdürülmesini vurguluyor ve uygun olduğunda ortak kodlar için yardımcı yöntemler veya sınıflar düşünülmesini öneriyor.
İşte kullanımını gösteren ana program kodu:
// Main Program
class Program
{
static void Main(string[] args)
{
// Using Base Class
SQLDataAccess sqlData = new SQLDataAccess();
Console.WriteLine(sqlData.LoadConnectionString());
sqlData.LoadData();
sqlData.SaveData();
Console.WriteLine("--------------------------");
// Using Derived Class from Abstract Base Class
SQLDataAccessWithAbstract sqlDataAbstract = new SQLDataAccessWithAbstract();
Console.WriteLine(sqlDataAbstract.LoadConnectionString());
sqlDataAbstract.LoadData();
sqlDataAbstract.SaveData();
Console.WriteLine("--------------------------");
// You can't instantiate Abstract Base Class directly
// AbstractDataAccess abstractData = new AbstractDataAccess();
// Error: Cannot create an instance of the abstract class
}
}' Main Program
Class Program
Shared Sub Main(ByVal args As String())
' Using Base Class
Dim sqlData As New SQLDataAccess()
Console.WriteLine(sqlData.LoadConnectionString())
sqlData.LoadData()
sqlData.SaveData()
Console.WriteLine("--------------------------")
' Using Derived Class from Abstract Base Class
Dim sqlDataAbstract As New SQLDataAccessWithAbstract()
Console.WriteLine(sqlDataAbstract.LoadConnectionString())
sqlDataAbstract.LoadData()
sqlDataAbstract.SaveData()
Console.WriteLine("--------------------------")
' You can't instantiate Abstract Base Class directly
' Dim abstractData As New AbstractDataAccess()
' Error: Cannot create an instance of the abstract class
End Sub
End ClassTim Corey'nin C# soyut sınıflar konusundaki derinlemesine incelemesi, onların amacı, işlevselliği ve gerçek dünyadaki uygulamaları hakkında net ve pratik bir anlayış sunuyor. Demo uygulaması aracılığıyla, soyut sınıfların temel sınıflar ve arayüzler arasındaki boşluğu nasıl doldurduğunu gösteriyor, geliştiricilerin esnek ve sürdürülebilir kod yapıları oluşturmalarını sağlıyor.
Soyut sınıfların doğru senaryolarda kullanımı ve aşırı kullanımından kaçınma gibi en iyi uygulamalar vurgulanarak, Tim, geliştiricilere bilinçli tasarım seçimleri yapmaları için araçlar sunuyor. Bu kavramlara sağlam bir şekilde hakim olan geliştiriciler, nesneye yönelik programlama becerilerini geliştirebilir ve sağlam C# uygulamaları oluşturabilirler.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy