C# Object Oriented (Geliştiriciler için Nasıl Çalışır)
Nesne yönelimli programlama (OOP), modüler, yeniden kullanılabilir ve uyarlanabilir kodlar oluşturmayı sağlayan yazılım geliştirme alanında temel bir kavramdır. C#, modern bir nesne yönelimli programlama dili olarak, karmaşık uygulamalar oluşturma için sağlam bir çerçeve sunar. Bu kılavuz, C#'ı kullanarak OOP kavramlarını tanıtır, başlangıç seviyesindekilerin bu ilkeleri etkili bir şekilde anlamalarına ve uygulamalarına yardımcı olacak pratik uygulamalar ve kod örnekleri üzerine odaklanır. IronPDF kütüphanesi için C# ile birlikte bu ilkelerin nasıl uygulanabileceğini de tartışacağız.
Nesne Yönelimli Programlama Kavramlarını Anlamak
OOP'nin kalbinde birkaç anahtar kavram yatar: sınıflar, nesneler, kalıtım, çok biçimlilik, soyutlama ve kapsülleme. Bu kavramlar, geliştiricilerin gerçek dünya varlıklarını modellemesine, karmaşıklığı yönetmesine ve kodlarının sürdürülebilirliğini artırmasına olanak tanır.
Sınıflar ve Nesneler: Yapı Taşları
Bir sınıf, bireysel nesneler oluşturur. Sınıf, sınıfın tüm nesnelerinin paylaştığı verileri ve davranışları tanımlayan bir taslaktır. Bir nesne, bir sınıfın bir tezahürüdür. Sınıf taslağında tanımlanan soyut yer tutuculardan ziyade gerçek değerleri somutlaştırır.
public class Car // A class declared as 'Car' defines its structure and behavior.
{
public string Name;
public string Color;
public void DisplayInfo()
{
Console.WriteLine($"Name: {Name}, Color: {Color}");
}
}
class Program // This is the program class, serving as the entry point of a C# program.
{
static void Main(string[] args)
{
Car myCar = new Car();
myCar.Name = "Toyota";
myCar.Color = "Red";
myCar.DisplayInfo();
}
}
public class Car // A class declared as 'Car' defines its structure and behavior.
{
public string Name;
public string Color;
public void DisplayInfo()
{
Console.WriteLine($"Name: {Name}, Color: {Color}");
}
}
class Program // This is the program class, serving as the entry point of a C# program.
{
static void Main(string[] args)
{
Car myCar = new Car();
myCar.Name = "Toyota";
myCar.Color = "Red";
myCar.DisplayInfo();
}
}
Public Class Car ' A class declared as 'Car' defines its structure and behavior.
Public Name As String
Public Color As String
Public Sub DisplayInfo()
Console.WriteLine($"Name: {Name}, Color: {Color}")
End Sub
End Class
Friend Class Program ' This is the program class, serving as the entry point of a C# program.
Shared Sub Main(ByVal args() As String)
Dim myCar As New Car()
myCar.Name = "Toyota"
myCar.Color = "Red"
myCar.DisplayInfo()
End Sub
End Class
Bu örnekte, Araba sınıfında iki veri üyesi (Ad ve Renk) ve bir metot (DisplayInfo) vardır. Uygulamanın giriş noktası olarak hizmet veren Ana metot, Araba sınıfının bir örneğini yaratır ve bu nesneye değerler atar, ardından bu değerleri göstermek için metodu çağırır.

Kalıtım: Mevcut Sınıfları Genişletmek
Kalıtım, bir sınıfın mevcut bir sınıfın özelliklerini ve metotlarını devralmasına olanak tanır. Özellikleri devralınan sınıfa temel sınıf denir ve bu özellikleri devralan sınıfa türetilmiş sınıf denir.
public class Vehicle
{
public string LicensePlate;
public void Honk()
{
Console.WriteLine("Honking");
}
}
public class Truck : Vehicle // Truck is a child class derived from the Vehicle base class.
{
public int CargoCapacity;
}
class Program
{
static void Main(string[] args)
{
Truck myTruck = new Truck();
myTruck.LicensePlate = "ABC123";
myTruck.CargoCapacity = 5000;
myTruck.Honk();
}
}
public class Vehicle
{
public string LicensePlate;
public void Honk()
{
Console.WriteLine("Honking");
}
}
public class Truck : Vehicle // Truck is a child class derived from the Vehicle base class.
{
public int CargoCapacity;
}
class Program
{
static void Main(string[] args)
{
Truck myTruck = new Truck();
myTruck.LicensePlate = "ABC123";
myTruck.CargoCapacity = 5000;
myTruck.Honk();
}
}
Public Class Vehicle
Public LicensePlate As String
Public Sub Honk()
Console.WriteLine("Honking")
End Sub
End Class
Public Class Truck ' Truck is a child class derived from the Vehicle base class.
Inherits Vehicle
Public CargoCapacity As Integer
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim myTruck As New Truck()
myTruck.LicensePlate = "ABC123"
myTruck.CargoCapacity = 5000
myTruck.Honk()
End Sub
End Class
Bu örnekte, Kamyon, Araç temel sınıfını uzatarak, Plaka alanını ve Korna metodunu devralan, yeni bir alan olan Yük Kapasitesi ekleyerek türetilmiş bir sınıftır.
Çok biçimlilik ve Soyutlama: Arayüzler ve Soyut Sınıflar
Çok biçimlilik, nesnelerin, spesifik sınıfları yerine temel sınıflarının örnekleri olarak ele alınmasına olanak tanır. Soyutlama, somutlaştırılamayan, ancak temel sınıf olarak kullanılabilecek soyut sınıfların ve arayüzlerin tanımlanmasına izin verir.
Soyut Sınıflar ve Metotlar
Soyut sınıflar somutlaştırılamaz ve genellikle birden çok türetilmiş sınıfın paylaşabileceği bir temel sınıfın ortak bir tanımını sağlamak için kullanılır.
public abstract class Shape
{
public abstract void Draw();
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle");
}
}
public abstract class Shape
{
public abstract void Draw();
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle");
}
}
Public MustInherit Class Shape
Public MustOverride Sub Draw()
End Class
Public Class Circle
Inherits Shape
Public Overrides Sub Draw()
Console.WriteLine("Drawing a circle")
End Sub
End Class
Birden Fazla Arayüzü Uygulama
Bir arayüz, sınıfların tanımlı yöntemlerini uygulayarak yerine getirebileceği bir anlaşma veya sözleşme tesis eder. Sınıflar, çok biçimliliğin bir biçimini sağlayarak birden fazla arayüzü uygulayabilir.
public interface IDrawable
{
void Draw();
}
public interface IColorable
{
void Color();
}
public class CustomShape : IDrawable, IColorable // Defining a new class CustomShape that implements IDrawable and IColorable.
{
public void Draw()
{
Console.WriteLine("Custom shape drawn");
}
public void Color()
{
Console.WriteLine("Custom shape colored");
}
}
public interface IDrawable
{
void Draw();
}
public interface IColorable
{
void Color();
}
public class CustomShape : IDrawable, IColorable // Defining a new class CustomShape that implements IDrawable and IColorable.
{
public void Draw()
{
Console.WriteLine("Custom shape drawn");
}
public void Color()
{
Console.WriteLine("Custom shape colored");
}
}
Public Interface IDrawable
Sub Draw()
End Interface
Public Interface IColorable
Sub Color()
End Interface
Public Class CustomShape ' Defining a new class CustomShape that implements IDrawable and IColorable.
Implements IDrawable, IColorable
Public Sub Draw() Implements IDrawable.Draw
Console.WriteLine("Custom shape drawn")
End Sub
Public Sub Color() Implements IColorable.Color
Console.WriteLine("Custom shape colored")
End Sub
End Class
Kapsülleme: Verileri Koruma
Kapsülleme, bir nesnenin belirli bileşenlerine erişimi sınırlama ve dış tarafların iç temsili görmesini engelleme mekanizmasıdır. Bu, erişim belirleyicilerinin kullanımı aracılığıyla gerçekleştirilir.
public class Person
{
private string name; // Private variable, inaccessible outside the class
public string Name // Public property to access the private variable
{
get { return name; }
set { name = value; }
}
}
// Example showing a simple customer class with encapsulated data
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
}
public class Person
{
private string name; // Private variable, inaccessible outside the class
public string Name // Public property to access the private variable
{
get { return name; }
set { name = value; }
}
}
// Example showing a simple customer class with encapsulated data
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
}
Public Class Person
'INSTANT VB NOTE: The field name was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private name_Conflict As String ' Private variable, inaccessible outside the class
Public Property Name() As String ' Public property to access the private variable
Get
Return name_Conflict
End Get
Set(ByVal value As String)
name_Conflict = value
End Set
End Property
End Class
' Example showing a simple customer class with encapsulated data
Public Class Customer
Public Property Name() As String
Public Property Address() As String
End Class
Bu örnekte, isim alanı özel olup, Kişi sınıfının dışında erişilemez. Bu alana erişim, get ve set yöntemlerini içeren kamuya açık İsim özelliği aracılığıyla sağlanır.
Pratik Kullanım Durumları ve Kod Örnekleri
Şimdi bu ilkelerin eylemde olduğunu göstermek için birden fazla sınıf içeren bir örnek keşfedeceğiz.
using System;
namespace OOPExample
{
public class Program
{
static void Main(string[] args)
{
ElectricCar myElectricCar = new ElectricCar();
myElectricCar.Make = "Tesla";
myElectricCar.Model = "Model 3";
myElectricCar.BatteryLevel = 100;
myElectricCar.Drive();
myElectricCar.Charge();
}
}
public abstract class Vehicle
{
public string Make { get; set; }
public string Model { get; set; }
public abstract void Drive();
}
public class Car : Vehicle
{
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving.");
}
}
public class ElectricCar : Car
{
public int BatteryLevel { get; set; }
public void Charge()
{
Console.WriteLine("Charging the car.");
}
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving silently.");
}
}
}
using System;
namespace OOPExample
{
public class Program
{
static void Main(string[] args)
{
ElectricCar myElectricCar = new ElectricCar();
myElectricCar.Make = "Tesla";
myElectricCar.Model = "Model 3";
myElectricCar.BatteryLevel = 100;
myElectricCar.Drive();
myElectricCar.Charge();
}
}
public abstract class Vehicle
{
public string Make { get; set; }
public string Model { get; set; }
public abstract void Drive();
}
public class Car : Vehicle
{
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving.");
}
}
public class ElectricCar : Car
{
public int BatteryLevel { get; set; }
public void Charge()
{
Console.WriteLine("Charging the car.");
}
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving silently.");
}
}
}
Imports System
Namespace OOPExample
Public Class Program
Shared Sub Main(ByVal args() As String)
Dim myElectricCar As New ElectricCar()
myElectricCar.Make = "Tesla"
myElectricCar.Model = "Model 3"
myElectricCar.BatteryLevel = 100
myElectricCar.Drive()
myElectricCar.Charge()
End Sub
End Class
Public MustInherit Class Vehicle
Public Property Make() As String
Public Property Model() As String
Public MustOverride Sub Drive()
End Class
Public Class Car
Inherits Vehicle
Public Overrides Sub Drive()
Console.WriteLine($"The {Make} {Model} is driving.")
End Sub
End Class
Public Class ElectricCar
Inherits Car
Public Property BatteryLevel() As Integer
Public Sub Charge()
Console.WriteLine("Charging the car.")
End Sub
Public Overrides Sub Drive()
Console.WriteLine($"The {Make} {Model} is driving silently.")
End Sub
End Class
End Namespace
Bu örnekte, Sür(), Araç soyut sınıfından alınmış soyut bir metottur. Araba, Sür()'ü uygulayan bir türetilmiş sınıf olup, ElectricCar ise yeni özellikler ekleyerek, Batarya Seviyesi gibi ve kendi Sür() uygulamasını içeren başka bir hiyerarşi seviyesidir. Bu yapı, bir C# uygulamasında soyutlama, kapsülleme, kalıtım ve çok biçimliliğin birlikte çalışmasını göstermektedir.

IronPDF: C# PDF Kütüphanesi
IronPDF kütüphanesi .NET için, C# geliştiricileri için .NET uygulamalarında PDF belgeleri oluşturma, düzenleme ve çıkarma sürecini basitleştirmek için tasarlanmış çok yönlü bir araçtır. IronPDF, HTML dizelerinden PDF oluşturmanın, URL'lerden veya ASPX dosyalarından, PDF oluşturma ve manipülasyon sürecinde yüksek bir kontrol seviyesi sunarak basitliğini sağlar. Buna ek olarak, IronPDF üstbilgi ve alt bilgi ekleme, filigran ekleme ve şifreleme gibi ileri düzey özellikleri destekler, bu da onu .NET uygulamalarında PDF'leri işlemek için kapsamlı bir çözüm haline getirir.
OOP ile IronPDF Örneği
İşte C# uygulamasında IronPDF kullanımını gösteren, OOP'deki temel bir kavram olan kalıtımla IronPDF işlevselliğini genişletmenin nasıl olabileceğini göstermek için virtual anahtar kelimesini içeren basit bir örnek. Bir temel sınıfın temel bir PDF raporu oluşturduğunu ve türetilen bir sınıfın bu işlevselliği özel bir başlık eklemek için genişlettiğini varsayalım:
using IronPdf;
public class BasicReportGenerator
{
public virtual PdfDocument GenerateReport(string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
return pdf;
}
}
public class CustomReportGenerator : BasicReportGenerator
{
public override PdfDocument GenerateReport(string htmlContent)
{
var pdf = base.GenerateReport(htmlContent);
AddCustomHeader(pdf, "Custom Report Header");
return pdf;
}
private void AddCustomHeader(PdfDocument document, string headerContent)
{
// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
CenterText = headerContent,
};
document.AddTextHeaders(textHeader);
}
}
class Program
{
static void Main(string[] args)
{
License.LicenseKey = "License-Key";
// HTML content for the report
string htmlContent = "<html><body><h1>Sample Report</h1><p>This is a sample report content.</p></body></html>";
// Using BasicReportGenerator
BasicReportGenerator basicReportGenerator = new BasicReportGenerator();
var basicPdf = basicReportGenerator.GenerateReport(htmlContent);
basicPdf.SaveAs("basic_report.pdf");
// Using CustomReportGenerator
CustomReportGenerator customReportGenerator = new CustomReportGenerator();
var customPdf = customReportGenerator.GenerateReport(htmlContent);
customPdf.SaveAs("custom_report.pdf");
Console.WriteLine("PDF reports generated successfully.");
}
}
using IronPdf;
public class BasicReportGenerator
{
public virtual PdfDocument GenerateReport(string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
return pdf;
}
}
public class CustomReportGenerator : BasicReportGenerator
{
public override PdfDocument GenerateReport(string htmlContent)
{
var pdf = base.GenerateReport(htmlContent);
AddCustomHeader(pdf, "Custom Report Header");
return pdf;
}
private void AddCustomHeader(PdfDocument document, string headerContent)
{
// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
CenterText = headerContent,
};
document.AddTextHeaders(textHeader);
}
}
class Program
{
static void Main(string[] args)
{
License.LicenseKey = "License-Key";
// HTML content for the report
string htmlContent = "<html><body><h1>Sample Report</h1><p>This is a sample report content.</p></body></html>";
// Using BasicReportGenerator
BasicReportGenerator basicReportGenerator = new BasicReportGenerator();
var basicPdf = basicReportGenerator.GenerateReport(htmlContent);
basicPdf.SaveAs("basic_report.pdf");
// Using CustomReportGenerator
CustomReportGenerator customReportGenerator = new CustomReportGenerator();
var customPdf = customReportGenerator.GenerateReport(htmlContent);
customPdf.SaveAs("custom_report.pdf");
Console.WriteLine("PDF reports generated successfully.");
}
}
Imports IronPdf
Public Class BasicReportGenerator
Public Overridable Function GenerateReport(ByVal htmlContent As String) As PdfDocument
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
Return pdf
End Function
End Class
Public Class CustomReportGenerator
Inherits BasicReportGenerator
Public Overrides Function GenerateReport(ByVal htmlContent As String) As PdfDocument
Dim pdf = MyBase.GenerateReport(htmlContent)
AddCustomHeader(pdf, "Custom Report Header")
Return pdf
End Function
Private Sub AddCustomHeader(ByVal document As PdfDocument, ByVal headerContent As String)
' Create text header
Dim textHeader As New TextHeaderFooter With {.CenterText = headerContent}
document.AddTextHeaders(textHeader)
End Sub
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
License.LicenseKey = "License-Key"
' HTML content for the report
Dim htmlContent As String = "<html><body><h1>Sample Report</h1><p>This is a sample report content.</p></body></html>"
' Using BasicReportGenerator
Dim basicReportGenerator As New BasicReportGenerator()
Dim basicPdf = basicReportGenerator.GenerateReport(htmlContent)
basicPdf.SaveAs("basic_report.pdf")
' Using CustomReportGenerator
Dim customReportGenerator As New CustomReportGenerator()
Dim customPdf = customReportGenerator.GenerateReport(htmlContent)
customPdf.SaveAs("custom_report.pdf")
Console.WriteLine("PDF reports generated successfully.")
End Sub
End Class
Bu örnekte, BasicReportGenerator, HTML içeriğini alıp IronPDF kullanarak bir PDF belgesi oluşturan GenerateReport adlı bir yönteme sahiptir. CustomReportGenerator sınıfı, BasicReportGenerator'den türetilmiş olup, temel yöntem tarafından oluşturulan PDF'ye özel bir başlık eklemek için GenerateReport yöntemini geçersiz kılar. İşte kod tarafından üretilen özel rapor:

Sonuç

OOP'nin temel ilkelerini anlamak ve uygulamak, yeni başlayanların C#'ı ve sağlam yazılım çözümleri geliştirmeyi öğrenmelerine önemli adımlar attırabilir. Kalıtım ve çok biçimlilik, yeni sınıfların mevcut yapı ve işlevsellikler üzerine inşa edilmesine, kodun yeniden kullanılmasına ve esnekliğe izin verir. Soyutlama ve kapsülleme, sınıfların yalnızca dış dünyaya gerekli olanı göstermesini ve dahili çalışma düzenlerinin özel ve istenmeyen kullanımından korunduğundan emin olur. IronPDF ücretsiz denemesini C#'ta PDF oluşturma için deneyebilirsiniz, başlangıç liteLicense.
Sıkça Sorulan Sorular
Nesne yönelimli programlama ilkelerini C#'ta nasıl uygulayabilirim?
C#'ta, gerçek dünya varlıklarını modellemek için sınıflar ve nesneler tanımlayarak nesne yönelimli programlama ilkelerini uygulayabilirsiniz. Sınıfları genişletmek için kalıtımı, metotları geçersiz kılmayı sağlamak için çok biçimliliği ve veriyi korumak için kapsüllemeyi kullanarak, modüler ve bakımı kolay kodlar oluşturabilirsiniz.
Abstraksiyonun C# programlamadaki rolü nedir?
C#'ta abstraksiyon, geliştiricilerin kompleks sistemleri, soyut, üst düzey kavramlar ile somut uygulamalar arasında net bir ayrım sağlayarak basitleştirmesine olanak tanır. Soyut sınıflar ve arayüzler, diğer sınıflar için bir taslak tanımlamak amacıyla kullanılır ve uygulamanın farklı bölümlerinde tutarlı bir yapı ve davranış sağlar.
Nesne yönelimli ilkeler kullanarak C# ile bir PDF raporu nasıl oluşturabilirim?
IronPDF kütüphanesi kullanarak C#'ta bir PDF raporu oluşturabilirsiniz; bu kütüphane, HTML içeriğinden PDF belgeleri üretmenizi sağlar. Nesne yönelimli ilkeler kullanarak, rapor oluşturma için bir taban sınıf oluşturabilir ve türetilmiş sınıflarda özel başlık veya altbilgiler eklemek gibi işlevsellikleri genişletebilirsiniz.
C#'ta kapsülleme kullanımının avantajları nelerdir?
C#'ta kapsülleme, bir nesnenin verilerini, iç bileşenlere erişimi kısıtlayarak koruma avantajı sunar. Bu, erişim belirleyicileri kullanılarak sağlanır ve veri bütünlüğünü koruyarak, programın diğer bölümlerinden istenmeyen müdahaleleri önler.
Bir C# uygulamasında çok biçimlilik nasıl uygulanır?
C#'ta, çok biçimlilik türetilmiş sınıflarda metot geçersiz kılma kullanılarak uygulanabilir. Bu, bir temel sınıfta metotlar tanımlamanıza ve türetilmiş sınıflarda onları geçersiz kılmanıza olanak tanır, esneklik sağlar ve nesnelerin temel sınıflarının örnekleri olarak muamele görmesine izin verir.
C#'ta bir PDF kütüphanesinin işlevselliğini nasıl genişletebilirim?
IronPDF gibi bir PDF kütüphanesinin işlevselliğini genişletmek için ek özellikler implemente eden özel sınıflar oluşturabilirsiniz. Örneğin, bir temel PDF oluşturma sınıfından miras alan bir sınıf oluşturabilir ve PDF sayfalarının görünümünü veya içeriğini özelleştiren metotlar ekleyebilirsiniz.
C#'ta kalıtım kullanarak bir kod örneği verebilir misiniz?
C#'ta kalıtım gösteren bir kod örneği, 'Hız' ve 'Yakıt' gibi özelliklere sahip bir temel sınıf 'Araç' tanımlamayı içerebilir. 'Araba' gibi bir türetilmiş sınıf, 'Araç' sınıfını genişletebilir ve 'Kapı Sayısı' gibi özel özellikler ekleyebilir. Bu, türetilmiş sınıfların temel sınıfların işlevselliğini nasıl miras alıp genişletebileceğini gösterir.
IronPDF, C#'ta nesne yönelimli programlama ile nasıl entegre olur?
IronPDF, geliştiricilerin PDF oluşturma mantığını kapsayan sınıflar oluşturmalarına olanak tanıyarak C#'ta nesne yönelimli programlama ile entegre olur. Ortak PDF işlemleri için taban sınıfları tanımlayabilir ve miras ve çok biçimlilik kullanarak, üstbilgi ekleme veya özel formatlama gibi özel işlevselliklerle genişletebilirsiniz.




