Altbilgi içeriğine atla
.NET YARDıM

C# Bu (Geliştiriciler İçin Nasıl Çalışır)

C# dilinde özel bir öneme sahip belirli bir anahtar kelime vardır ve bu, this anahtar kelimesidir. Bu anahtar kelime, kullanıldığı mevcut sınıf örneğine atıfta bulunur. Başka şeylerin yanı sıra, aynı adı paylaşan sınıf düzeyindeki değişkenlerle metot parametrelerini birbirinden ayırt etmek için kullanılabilir. Örneğin, bir örnek değişken ve bir metot parametresi aynı ada sahipse, this hayat kurtarıcı olabilir!

Bu Anahtar Kelimenin Temelleri

Örneğin, Employee gibi bir genel sınıfta, id veya name gibi genel örnek değişkenlere sahip olabilirsiniz. Bu örnek değişkenlere bir metod içinde değer atamak isterseniz, yaygın bir sorunla karşılaşabilirsiniz: Ya metod parametreleri ile örnek değişkenlerin isimleri aynı olursa?

İşte bir çözüm: C# dökümantasyonunda this anahtar kelimesini kullanın! Genel sınıf Employee içindeki bir metodun aşağıdaki örneğinde, this anahtar kelimesi aynı isme sahip örnek değişkenleri ve metot parametrelerini ayırt etmek için kullanılır.

public class Employee
{
    private int id;
    private string name;

    public void Display(int id, string name)
    {
        // Use `this.id` to refer to the instance variable, 
        // and `id` for the method parameter.
        this.id = id;
        this.name = name;
    }
}
public class Employee
{
    private int id;
    private string name;

    public void Display(int id, string name)
    {
        // Use `this.id` to refer to the instance variable, 
        // and `id` for the method parameter.
        this.id = id;
        this.name = name;
    }
}
Public Class Employee
	Private id As Integer
	Private name As String

	Public Sub Display(ByVal id As Integer, ByVal name As String)
		' Use `this.id` to refer to the instance variable, 
		' and `id` for the method parameter.
		Me.id = id
		Me.name = name
	End Sub
End Class
$vbLabelText   $csharpLabel

Bu durumda this.id örnek değişkenine atıfta bulunurken, id metot parametresidir.

Yapıcı Aşırı Yükleme ile this Anahtar Kelimesi

this anahtar kelimesiyle, yapıcı aşırı yükleme aynı sınıf içinde güçlü bir teknik hâline gelir. Bir sınıf, örneğin Student sınıfı, değişken parametrelere sahip birden fazla yapıcıya sahipse, this anahtar kelimesi bir yapıcının diğerini çağırmasına olanak tanır, böylece gereksiz kod yazma ihtiyacını ortadan kaldırır.

Aşağıdaki örnekte, this parametreli bir yapıcıda kullanılmıştır:

public class Student
{
    private string name;
    private int id;

    public Student() : this("Default", 0)
    {
        // Default constructor delegates to the parameterized constructor
        // with "Default" as the name and 0 as the id.
    }

    public Student(string name, int id)
    {
        // Assign the parameters to the instance variables
        this.name = name;
        this.id = id;
    }
}
public class Student
{
    private string name;
    private int id;

    public Student() : this("Default", 0)
    {
        // Default constructor delegates to the parameterized constructor
        // with "Default" as the name and 0 as the id.
    }

    public Student(string name, int id)
    {
        // Assign the parameters to the instance variables
        this.name = name;
        this.id = id;
    }
}
Public Class Student
	Private name As String
	Private id As Integer

	Public Sub New()
		Me.New("Default", 0)
		' Default constructor delegates to the parameterized constructor
		' with "Default" as the name and 0 as the id.
	End Sub

	Public Sub New(ByVal name As String, ByVal id As Integer)
		' Assign the parameters to the instance variables
		Me.name = name
		Me.id = id
	End Sub
End Class
$vbLabelText   $csharpLabel

Parametresiz yapıcıda, this("Default", 0) parametreli yapıcıyı çağırır, Default ismi ve 0 kimliği olarak ayarlanır.

Genişletme Metotlarında this'yi Keşfetme

C# dilinde uzantı metotları, mevcut türlere orijinal türü değiştirmeden metot eklemenin bir yolunu sunar. Burada this anahtar kelimesi büyüleyici bir şey yapar. Genişletilen türü belirtmek için uzatma metodunun parametre listesinde kullanılır.

Aşağıdaki uzantı metodu örneğini göz önünde bulundurun:

public static class StringExtensions
{
    // This extension method can be called on any string instance
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}
public static class StringExtensions
{
    // This extension method can be called on any string instance
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}
Public Module StringExtensions
	' This extension method can be called on any string instance
	<System.Runtime.CompilerServices.Extension> _
	Public Function IsNullOrEmpty(ByVal str As String) As Boolean
		Return String.IsNullOrEmpty(str)
	End Function
End Module
$vbLabelText   $csharpLabel

Burada, this string str, C#'a bunun dizi türü için bir genişletme metodu olduğunu söyler. Şimdi, bu metodu herhangi bir dizi objesi üzerinde, if(myString.IsNullOrEmpty()) gibi kullanabilirsiniz.

this İndeksleyicilerde

this anahtar kelimesi de indeksleyicileri tanımlarken kullanılabilir. Bir dizinleyici, bir sınıfın örneklerinin tıpkı diziler gibi indekslenmesine olanak tanır. Bu, nesneler içindeki verilere indeks benzeri bir notasyon kullanarak erişmenize yardımcı olur. Bir indeksleyicide, this genellikle int index olan bir dizi indeksi ile takip edilir.

İşte bir dizinleyiciye basit bir örnek:

public class Test
{
    private int[] array = new int[100];

    // Define an indexer for the class
    public int this[int index]
    {
        get { return array[index]; }
        set { array[index] = value; }
    }
}
public class Test
{
    private int[] array = new int[100];

    // Define an indexer for the class
    public int this[int index]
    {
        get { return array[index]; }
        set { array[index] = value; }
    }
}
Public Class Test
	Private array(99) As Integer

	' Define an indexer for the class
	Default Public Property Item(ByVal index As Integer) As Integer
		Get
			Return array(index)
		End Get
		Set(ByVal value As Integer)
			array(index) = value
		End Set
	End Property
End Class
$vbLabelText   $csharpLabel

Bu Test sınıfında, this anahtar kelimesi ile array örnek alanında değer almak veya ayarlamak için kullanılabilecek bir indeksleyici tanımlar.

this ve Statik Üyeler

this hakkında önemli not: statik üyeler veya metotlar için referans olarak kullanılamaz. Çünkü this şu anki örneğe atıfta bulunur ve statik üyeler sınıfın kendisine aittir, sınıfın örneğine değil.

public class Program
{
    public static void Main(string[] args)
    {
        // Can't use `this` here, because 'Main' is a static method.
    }
}
public class Program
{
    public static void Main(string[] args)
    {
        // Can't use `this` here, because 'Main' is a static method.
    }
}
Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		' Can't use `this` here, because 'Main' is a static method.
	End Sub
End Class
$vbLabelText   $csharpLabel

Bu yüzden unutmayın, this örnekler içindir, sınıf seviyesinde veya statik üyeler için değil!

this Anahtar Kelimesi ve Özellikler

Tıpkı örnek değişkenler ve metod parametreleri gibi, this anahtar kelimesi de özelliklerle kullanılabilir. C# dilinde, bir özellik, özel alanın değerini okumak, yazmak veya hesaplamak için esnek bir mekanizma sağlayan bir üyedir. Özellikler, sanki genel veri üyeleriymiş gibi kullanılabilir, ancak aslında erişimci olarak adlandırılan özel yöntemlerdir.

Bir özellikte this kullanan basit bir örneğe bakalım:

public class Employee
{
    private string name;

    public string Name
    {
        get { return this.name; }
        set { this.name = value; } // Use `this` to refer to the instance variable
    }
}
public class Employee
{
    private string name;

    public string Name
    {
        get { return this.name; }
        set { this.name = value; } // Use `this` to refer to the instance variable
    }
}
Public Class Employee
'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

	Public Property Name() As String
		Get
			Return Me.name_Conflict
		End Get
		Set(ByVal value As String)
			Me.name_Conflict = value
		End Set ' Use `this` to refer to the instance variable
	End Property
End Class
$vbLabelText   $csharpLabel

Yukarıdaki sınıfta, this anahtar kelimesi, yöntem ve ayarlayıcıların Name özelliğinde özel dize name'a atıfta bulunmak için kullanılır.

this'yı ve Delege Metotları Keşfetmek

this'nın ortaya çıktığı başka bir yer de delege metotlarıdır. C#'ta bir delege, C veya C++'daki bir fonksiyon işaretçisine benzer. Bir yönteme referans tutan referans tipi bir değişkendir. Tıpkı genişletme metotları gibi, delege metotlar da this kullanarak mevcut örneğe erişebilirler.

Bir this kullanan bir delege örneği işte burada:

public delegate void DisplayDelegate();

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    public void Display()
    {
        // `this.DisplayDetails` refers to the method instance of the current object.
        DisplayDelegate displayDelegate = new DisplayDelegate(this.DisplayDetails);
        displayDelegate();
    }

    private void DisplayDetails()
    {
        Console.WriteLine("ID: " + Id + ", Name: " + Name);
    }
}
public delegate void DisplayDelegate();

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    public void Display()
    {
        // `this.DisplayDetails` refers to the method instance of the current object.
        DisplayDelegate displayDelegate = new DisplayDelegate(this.DisplayDetails);
        displayDelegate();
    }

    private void DisplayDetails()
    {
        Console.WriteLine("ID: " + Id + ", Name: " + Name);
    }
}
Public Delegate Sub DisplayDelegate()

Public Class Student
	Public Property Id() As Integer
	Public Property Name() As String

	Public Sub Display()
		' `this.DisplayDetails` refers to the method instance of the current object.
		Dim displayDelegate As New DisplayDelegate(AddressOf Me.DisplayDetails)
		displayDelegate()
	End Sub

	Private Sub DisplayDetails()
		Console.WriteLine("ID: " & Id & ", Name: " & Name)
	End Sub
End Class
$vbLabelText   $csharpLabel

Öğrenci sınıfında, this.DisplayDetails mevcut nesnenin DisplayDetails yöntemine atıfta bulunan yeni bir delege örneği oluşturur.

IronPDF ile this Anahtar Kelimesini Uygulama

IronPDF, HTML kullanarak PDF dosyalarını oluşturmak ve düzenlemek için sunulan güçlü bir .NET kütüphanesi ile this anahtar kelimesini kullanabileceğiniz bir örneğe dalalım.

IronPDF kütüphanesini kullanarak PDF dosyaları üzerinde çeşitli işlemler gerçekleştiren PDFHandler adında bir sınıfı düşünün:

using IronPdf;

public class PDFHandler
{
    private string path;

    public PDFHandler(string path)
    {
        this.path = path;
    }

    public void GeneratePDF(string content)
    {
        // Creating a renderer to convert HTML content to PDF
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);

        // Save the generated PDF to the path specified by the current instance
        PDF.SaveAs(this.path);
    }
}
using IronPdf;

public class PDFHandler
{
    private string path;

    public PDFHandler(string path)
    {
        this.path = path;
    }

    public void GeneratePDF(string content)
    {
        // Creating a renderer to convert HTML content to PDF
        var Renderer = new IronPdf.ChromePdfRenderer();
        var PDF = Renderer.RenderHtmlAsPdf(content);

        // Save the generated PDF to the path specified by the current instance
        PDF.SaveAs(this.path);
    }
}
Imports IronPdf

Public Class PDFHandler
	Private path As String

	Public Sub New(ByVal path As String)
		Me.path = path
	End Sub

	Public Sub GeneratePDF(ByVal content As String)
		' Creating a renderer to convert HTML content to PDF
		Dim Renderer = New IronPdf.ChromePdfRenderer()
		Dim PDF = Renderer.RenderHtmlAsPdf(content)

		' Save the generated PDF to the path specified by the current instance
		PDF.SaveAs(Me.path)
	End Sub
End Class
$vbLabelText   $csharpLabel

Bu PDFHandler sınıfında, this anahtar kelimesi, mevcut örneğin path alanına atıfta bulunmak için kullanılır. Bu alan, oluşturulan PDF'yi belirtilen yola kaydetmek için kullanılır.

Yeni bir PDFHandler örneği oluşturup GeneratePDF metodunu çağırdığımızda, this anahtar kelimesi, nesne oluşturulurken belirtilen path'den faydalanmamıza olanak tanır:

class Program
{
    static void Main(string[] args)
    {
        // Initialize PDFHandler with a specified file path
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyword.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        // Initialize PDFHandler with a specified file path
        PDFHandler pdfHandler = new PDFHandler("C:\\ThisKeyword.pdf");
        pdfHandler.GeneratePDF("Hello World!");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Initialize PDFHandler with a specified file path
		Dim pdfHandler As New PDFHandler("C:\ThisKeyword.pdf")
		pdfHandler.GeneratePDF("Hello World!")
	End Sub
End Class
$vbLabelText   $csharpLabel

Burada, this, IronPDF gibi kütüphanelerle çalışırken kodu daha okunabilir ve anlaşılır hâle getirir.

C# This (How It Works For Developers) Figure 1

Sonuç

Artık, this anahtar kelimesinin C#'ta geniş kapsamlı kullanımlarını içeren iyi bir anlama sahip olmalısınız, basit örnek değişkenlerden yapıcılar, genişletme metotları, özellikler, delege metotları, anonim metotlar ve hatta IronPDF gibi popüler kütüphanelerle kullanımlara kadar.

Unutmayın, IronPDF, IronPDF'in ücretsiz deneme sürümünü sunar, böylece bugün öğrendiğiniz her şeyi test edebilirsiniz. Bununla devam etmeye karar verirseniz, lisanslar sadece $liteLicense'dan başlıyor. IronPDF, uygulamalarınızda PDF dosyalarını yönetme görevini basitleştirerek C# geliştirme araç setinize değerli bir katkı olabilir.

Sıkça Sorulan Sorular

'this' anahtar kelimesi, C# dilinde sınıf değişkenleri ile metot parametreleri arasında nasıl ayrım yapabilir?

C# dilindeki 'this' anahtar kelimesi, mevcut sınıf örneğine başvurmak için kullanılır ve geliştiricilerin aynı adı paylaşan sınıf düzeyi değişkenleri ile metot parametrelerini ayırt etmesine olanak tanır. Bu, özellikle metotlar içinde ad çatışmalarının önlenmesinde faydalıdır.

"this" anahtar kelimesinin yapıcı aşırı yüklemesi içindeki önemi nedir?

Yapıcı yüklemesinde, 'this', bir yapıcının aynı sınıf içindeki başka bir yapıcıyı çağırmasını sağlar. Bu, mevcut yapıcı mantığının yeniden kullanılmasına olanak tanıyarak gereksiz kodları azaltmaya, tutarlılığı ve sürdürülebilirliği sağlamaya yardımcı olur.

'this', C# dilinde genişletme metotlarının kullanımını nasıl kolaylaştırır?

'this' anahtar kelimesi, uzantı yöntemlerinin metod parametre listesinde genişletilen türü belirtmek için kullanılır. Bu, geliştiricilerin mevcut türlere yeni metotlar ekleyerek kaynak kodlarını değiştirmeden işlevselliği sorunsuz bir şekilde genişletmelerine olanak tanır.

'this' anahtar kelimesi, dizinleyicilerle nasıl kullanılır?

C# dilinde 'this', dizinleyiciler ile bir sınıfın örneklerinin dizi benzeri bir gösterim kullanılarak erişilmesine izin veren özellikleri tanımlamak için kullanılır. Bu, nesneler içindeki veri erişiminin okunabilirliğini ve kullanılabilirliğini artırır.

Bu yüzden C#'ta "this" statik üyelerle kullanılamaz: çünkü "this" anahtar kelimesi bir sınıfın örnekine atıfta bulunur. Statik üyeler sınıfın örneklerine değil, sınıfın kendisine bağlıdır. Statik üyeler, sınıfın genel yapısı için ortaktır ve belirli bir nesneye bağlı değildir.

'this' anahtar kelimesi, bir sınıfın örnek üyelerine atıfta bulunur, statik üyeler ise sınıfın kendisine aittir, belirli bir örneğe değil. Bu nedenle, statik üyeler veya yöntemlere atıfta bulunmak için 'this' kullanılamaz.

'this' anahtar kelimesi, C# sınıflarında özelliğe erişimi nasıl geliştirir?

'This' anahtar kelimesi, bir özelliğin get ve set erişimcileri içinde mevcut sınıf örneğinin özel alanlarına başvurmak için kullanılabilir. Bu, işlemin sınıfın kendi alanları üzerinde gerçekleştirildiğini açıkça belirterek kod açıklığını artırır.

Delegeler bağlamında 'this' hangi rolü oynar?

Delegeler bağlamında, 'this', bir temsilcinin mevcut nesnenin yöntem örneğine referans vermesine olanak tanır. Bu, temsilciler aracılığıyla örnek yöntemleri çağırmak için çok önemlidir ve olay yönetimi ve geri çağrılarda esneklik sağlar.

IronPDF kütüphanesi kullanılırken 'this' kod okunabilirliğini nasıl artırabilir?

IronPDF kütüphanesini kullanırken, 'this' dosya yolları gibi örnek değişkenleri açıkça belirterek kodun daha okunabilir hale gelmesini sağlayabilir. Bu, PDF dosyalarının oluşturulması ve kaydedilmesi gibi işlemleri gerçekleştirirken özellikle faydalıdır, çünkü kodun açıklığını ve sürdürülebilirliğini artırır.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara