C# İndeksleyiciler (Geliştiriciler İçin Nasıl Çalışır)
C#'de bir indeksleyici, bir sınıf veya yapının örneklerinin dizi erişim operatörü [] kullanılarak erişilmesini sağlayan özel bir tür özelliktir. Indeksleyiciler, 'akıllı diziler' oluşturmak veya veriyi basitleştirilmiş bir sözdizimi ile kapsüller hale getirmek için çok kullanışlı olabilirler. Dizilerle kullanacağınız gibi, bir sınıf örneğini dizin üzerinden erişebilir şekilde kullanabilmenize olanak tanırlar. Bu makale, pratik örneklerle C# indeksleyicilerini nasıl bildireceğimizi ve kullanacağımızı inceleyecek. Makalenin sonunda IronPDF kütüphanesini de inceleyeceğiz.
Temel Indeksleyici Sözdizimi
Bir indeksleyici, bir sınıf veya yapı içinde this anahtar kelimesini kullanan ve ardından indeksleyici bildirimine sahip olan bir örnek üyedir. Ayrıca parametre türlerini ve dönüş türünü belirtirsiniz. Bir indeksleyici örneği üyesi için genel sözdizimi şöyle görünür:
public return_type this[parameter_type index]
{
get
{
// Code to return data
}
set
{
// Code to set data
}
}
public return_type this[parameter_type index]
{
get
{
// Code to return data
}
set
{
// Code to set data
}
}
Default Public Property Item(ByVal index As parameter_type) As return_type
Get
' Code to return data
End Get
Set(ByVal value As return_type)
' Code to set data
End Set
End Property
Burada, return_type indeksleyicinin döndüreceği değer türüdür, örneğin bir tamsayı değeri, ve parameter_type genellikle bir int olan indeksin türüdür. get erişimci belirtilen indeksteki değeri döndürür, ve set blok kodu erişimcisi o indekse bir değer atar.
Indeksleyici Bildirimi ve Kullanımı
C# sınıfı içinde bir indeksleyici uygulamanın temel bir illüstrasyonunu inceleyeceğiz. Bir dizi stringi kapsülleyen Program sınıfını düşünün.
class Program
{
private string[] values = new string[5]; // Array with 5 elements
public string this[int index]
{
get
{
return values[index];
}
set
{
values[index] = value;
}
}
}
class Program
{
private string[] values = new string[5]; // Array with 5 elements
public string this[int index]
{
get
{
return values[index];
}
set
{
values[index] = value;
}
}
}
Friend Class Program
Private values(4) As String ' Array with 5 elements
Default Public Property Item(ByVal index As Integer) As String
Get
Return values(index)
End Get
Set(ByVal value As String)
values(index) = value
End Set
End Property
End Class
Yukarıdaki kodda:
Programsınıfıvaluesadlı bir dizi dizisi içerir.string this[int index]indeksleyici bildirimidir, buradaint indexdizinin elemanlarına erişmek için kullanılan indeks parametreli özelliktir.geterişimci belirtilen indeksteki indekslenmiş değeri döndürür, veseterişimci o indekse bir indekslenmiş değer atar.
Bu, Program sınıfının bir örneğini oluşturabileceğiniz ve indeksleyiciyi kullanarak onun values dizisine erişebileceğiniz anlamına gelir, bu şekilde:
class Program
{
static void Main()
{
Program program = new Program();
// Set values using indexer
program[0] = "First";
program[1] = "Second";
// Access values using indexer
Console.WriteLine(program[0]); // Output: First
Console.WriteLine(program[1]); // Output: Second
}
}
class Program
{
static void Main()
{
Program program = new Program();
// Set values using indexer
program[0] = "First";
program[1] = "Second";
// Access values using indexer
Console.WriteLine(program[0]); // Output: First
Console.WriteLine(program[1]); // Output: Second
}
}
Friend Class Program
Shared Sub Main()
Dim program As New Program()
' Set values using indexer
program(0) = "First"
program(1) = "Second"
' Access values using indexer
Console.WriteLine(program(0)) ' Output: First
Console.WriteLine(program(1)) ' Output: Second
End Sub
End Class
Bu kodda, indeksleyicinin values dizisine erişmek için nasıl basit bir sözdizimi sağladığını, bir dizideki elemanlara erişme şeklinize benzer şekilde göreceksiniz.
get ve set Erişimcilerini Anlama
Indeksleyici içindeki get ve set erişimcileri, özelliklerle yaptığınız gibi veri alma ve atama yapmanıza olanak tanıyan blok kod gibidir. Ana fark, indeksleyicilerinin veri gruplarıyla çalışmak için bir indeks parametresi kullanmasıdır, bireysel veri üyeleriyle değil.
get bloğu belirtilen indeksteki veriyi döndürmekten sorumluyken, set bloğu belirtilen indekse veri atar. Bu bilgilerinizi pekiştirmek için başka bir örnek:
class StudentRecords
{
private string[] studentNames = new string[3];
public string this[int index]
{
get
{
if (index >= 0 && index < studentNames.Length)
{
return studentNames[index];
}
return "Invalid Index";
}
set
{
if (index >= 0 && index < studentNames.Length)
{
studentNames[index] = value;
}
}
}
public int Length
{
get { return studentNames.Length; }
}
}
class StudentRecords
{
private string[] studentNames = new string[3];
public string this[int index]
{
get
{
if (index >= 0 && index < studentNames.Length)
{
return studentNames[index];
}
return "Invalid Index";
}
set
{
if (index >= 0 && index < studentNames.Length)
{
studentNames[index] = value;
}
}
}
public int Length
{
get { return studentNames.Length; }
}
}
Friend Class StudentRecords
Private studentNames(2) As String
Default Public Property Item(ByVal index As Integer) As String
Get
If index >= 0 AndAlso index < studentNames.Length Then
Return studentNames(index)
End If
Return "Invalid Index"
End Get
Set(ByVal value As String)
If index >= 0 AndAlso index < studentNames.Length Then
studentNames(index) = value
End If
End Set
End Property
Public ReadOnly Property Length() As Integer
Get
Return studentNames.Length
End Get
End Property
End Class
Bu örnekte:
StudentRecordssınıfı, öğrencilerin isimlerini tutan özel birstring[] studentNamesdizisine sahiptir.- Indeksleyici, değeri ayarlamadan veya almadan önce indeksin dizinin sınırları içinde olup olmadığını kontrol eder.
- Bir
inttürüLengthözelliği, dizinin uzunluğuna erişim sağlar.
Bu sınıfı Main metodunda şu şekilde kullanabilirsiniz:
class Program
{
public static void Main()
{
StudentRecords records = new StudentRecords();
// Set values using indexer
records[0] = "John";
records[1] = "Jane";
records[2] = "Bob";
// Access values using indexer
for (int i = 0; i < records.Length; i++)
{
Console.WriteLine(records[i]);
}
}
}
class Program
{
public static void Main()
{
StudentRecords records = new StudentRecords();
// Set values using indexer
records[0] = "John";
records[1] = "Jane";
records[2] = "Bob";
// Access values using indexer
for (int i = 0; i < records.Length; i++)
{
Console.WriteLine(records[i]);
}
}
}
Friend Class Program
Public Shared Sub Main()
Dim records As New StudentRecords()
' Set values using indexer
records(0) = "John"
records(1) = "Jane"
records(2) = "Bob"
' Access values using indexer
For i As Integer = 0 To records.Length - 1
Console.WriteLine(records(i))
Next i
End Sub
End Class
Genel Bir Indeksleyici Oluşturma
Indeksleyicilere sahip genel sınıflar da oluşturabilir, böylece kodunuz birden fazla veri türünü işleyebilir. İşte genel bir indeksleyici ile bir genel sınıfın basit bir örneği:
class GenericClass<t>
{
private T[] elements = new T[5];
public T this[int index]
{
get
{
return elements[index];
}
set
{
elements[index] = value;
}
}
public int Length
{
get { return elements.Length; }
}
}
class GenericClass<t>
{
private T[] elements = new T[5];
public T this[int index]
{
get
{
return elements[index];
}
set
{
elements[index] = value;
}
}
public int Length
{
get { return elements.Length; }
}
}
Option Strict On
Public Class GenericClass(Of T)
Private elements As T() = New T(4) {}
Default Public Property Item(index As Integer) As T
Get
Return elements(index)
End Get
Set(value As T)
elements(index) = value
End Set
End Property
Public ReadOnly Property Length As Integer
Get
Return elements.Length
End Get
End Property
End Class
Bu kodda:
- GenericClass sınıfı, herhangi bir veri türü ile çalışabilecek bir indeksleyici tanımlar.
this[int index]indeksleyici, türü ne olursa olsun dizideki elemanlara erişmenize olanak tanır.
Artık GenericClass farklı veri türleri ile Main metodunda kullanabilirsiniz:
class Program
{
public static void Main()
{
GenericClass<int> intArray = new GenericClass<int>();
intArray[0] = 10;
intArray[1] = 20;
GenericClass<string> stringArray = new GenericClass<string>();
stringArray[0] = "Hello";
stringArray[1] = "World";
// Output the integer array values
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
// Output the string array values
for (int i = 0; i < stringArray.Length; i++)
{
Console.WriteLine(stringArray[i]);
}
}
}
class Program
{
public static void Main()
{
GenericClass<int> intArray = new GenericClass<int>();
intArray[0] = 10;
intArray[1] = 20;
GenericClass<string> stringArray = new GenericClass<string>();
stringArray[0] = "Hello";
stringArray[1] = "World";
// Output the integer array values
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
// Output the string array values
for (int i = 0; i < stringArray.Length; i++)
{
Console.WriteLine(stringArray[i]);
}
}
}
Friend Class Program
Public Shared Sub Main()
Dim intArray As New GenericClass(Of Integer)()
intArray(0) = 10
intArray(1) = 20
Dim stringArray As New GenericClass(Of String)()
stringArray(0) = "Hello"
stringArray(1) = "World"
' Output the integer array values
For i As Integer = 0 To intArray.Length - 1
Console.WriteLine(intArray(i))
Next i
' Output the string array values
For i As Integer = 0 To stringArray.Length - 1
Console.WriteLine(stringArray(i))
Next i
End Sub
End Class
IronPDF ve C# Indeksleyici Kullanımı

IronPDF, .NET uygulamalarında PDF oluşturma, düzenleme ve dönüştürme için tasarlanmış bir C# kütüphanesidir. PDF'lerle çalışmayı geliştiriciler için HTML'den PDF oluşturma, PDF dosyalarını değiştirme ve birleştirme, yazdırma ve imza ekleme gibi ileri düzey işlevleri programatik olarak ele alma gibi konularda basitleştirir.
IronPDF'yi indeksleyicilerden yararlanarak C# programlarınızda kullanarak dinamik olarak PDF içeriklerini oluşturabilir ve yönetebilirsiniz. Örneğin, HTML dizelemesini tutan bir sınıfınız olduğunda, bir indeksleyiciyi kullanarak HTML girişlerinden her biri için PDF oluşturmak isterseniz. Bu yaklaşım, PDF oluşturma işlemini kolaylaştırırken kodunuzu düzenli ve sezgisel tutar.
using IronPdf;
using System;
class PdfGenerator
{
private string[] htmlTemplates = new string[3];
public string this[int index]
{
get { return htmlTemplates[index]; }
set { htmlTemplates[index] = value; }
}
public void GeneratePdf(int index, string outputPath)
{
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(this[index]); // Access HTML string using indexer
pdfDocument.SaveAs(outputPath);
}
}
class Program
{
public static void Main()
{
PdfGenerator pdfGen = new PdfGenerator();
// Populate HTML templates
pdfGen[0] = "<h1>First Document</h1><p>This is the first PDF.</p>";
pdfGen[1] = "<h1>Second Document</h1><p>This is the second PDF.</p>";
pdfGen[2] = "<h1>Third Document</h1><p>This is the third PDF.</p>";
// Generate PDFs using the indexer
pdfGen.GeneratePdf(0, "first.pdf");
pdfGen.GeneratePdf(1, "second.pdf");
pdfGen.GeneratePdf(2, "third.pdf");
Console.WriteLine("PDFs generated successfully.");
}
}
using IronPdf;
using System;
class PdfGenerator
{
private string[] htmlTemplates = new string[3];
public string this[int index]
{
get { return htmlTemplates[index]; }
set { htmlTemplates[index] = value; }
}
public void GeneratePdf(int index, string outputPath)
{
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(this[index]); // Access HTML string using indexer
pdfDocument.SaveAs(outputPath);
}
}
class Program
{
public static void Main()
{
PdfGenerator pdfGen = new PdfGenerator();
// Populate HTML templates
pdfGen[0] = "<h1>First Document</h1><p>This is the first PDF.</p>";
pdfGen[1] = "<h1>Second Document</h1><p>This is the second PDF.</p>";
pdfGen[2] = "<h1>Third Document</h1><p>This is the third PDF.</p>";
// Generate PDFs using the indexer
pdfGen.GeneratePdf(0, "first.pdf");
pdfGen.GeneratePdf(1, "second.pdf");
pdfGen.GeneratePdf(2, "third.pdf");
Console.WriteLine("PDFs generated successfully.");
}
}
Imports IronPdf
Imports System
Friend Class PdfGenerator
Private htmlTemplates(2) As String
Default Public Property Item(ByVal index As Integer) As String
Get
Return htmlTemplates(index)
End Get
Set(ByVal value As String)
htmlTemplates(index) = value
End Set
End Property
Public Sub GeneratePdf(ByVal index As Integer, ByVal outputPath As String)
Dim renderer = New ChromePdfRenderer()
Dim pdfDocument = renderer.RenderHtmlAsPdf(Me(index)) ' Access HTML string using indexer
pdfDocument.SaveAs(outputPath)
End Sub
End Class
Friend Class Program
Public Shared Sub Main()
Dim pdfGen As New PdfGenerator()
' Populate HTML templates
pdfGen(0) = "<h1>First Document</h1><p>This is the first PDF.</p>"
pdfGen(1) = "<h1>Second Document</h1><p>This is the second PDF.</p>"
pdfGen(2) = "<h1>Third Document</h1><p>This is the third PDF.</p>"
' Generate PDFs using the indexer
pdfGen.GeneratePdf(0, "first.pdf")
pdfGen.GeneratePdf(1, "second.pdf")
pdfGen.GeneratePdf(2, "third.pdf")
Console.WriteLine("PDFs generated successfully.")
End Sub
End Class

Sonuç
C# indeksleyicileri, sınıflarınızın ve yapılarınızdaki diziler gibi davranmasını sağlayan yararlı bir özelliktir. Basitleştirilmiş sözdizimi ve esnek veri erişimi sunarak, daha sezgisel ve okunabilir kod oluşturabilirsiniz. Dize, tam sayı veya diğer veri türleriyle çalışıyor olmanız önemli değil, indeksleyiciler veri yapınızı kapsülleyip temiz ve verimli bir şekilde dizinleri kullanarak erişim sağlar.
IronPDF, ücretsiz bir deneme lisansı ile başlamanızı kolaylaştırır; size PDF oluşturma, düzenleme ve render etme için ihtiyaç duyduğunuz tüm özelliklere erişim sağlar. Yazılımı keşfetmek için zaman ayırabilirsiniz ve memnun olduğunuzda, lisanslar $799'dan başlayan fiyatlarla mevcuttur.
Sıkça Sorulan Sorular
C#'da bir dizinleyici nedir?
C#'da bir dizinleyici, bir sınıf veya yapı örneklerinin dizi erişim operatörü [] kullanılarak erişilmesine olanak tanıyan özel bir özellik türüdür. Bu, bir sınıfın örneklerinin dizi gibi kullanılmasını sağlar.
C#'da temel bir dizinleyici nasıl ilan edilir?
C#'da temel bir dizinleyici, 'this' anahtar kelimesi ve ardından dizinleyici beyanı ile ilan edilir. Parametre türlerini ve dönüş türünü belirtmelisiniz. Örneğin: public return_type this[parameter_type index] { get; set; }.
Bir dizinleyicide 'get' ve 'set' erişimcilerinin amacı nedir?
Bir dizinleyicide 'get' erişimcisi belirtilen bir dizinle verileri almak için kullanılırken, 'set' erişimcisi belirtilen bir dizine veri atamak için kullanılır. Bunlar, özellik erişimcileri gibi çalışır ancak veri koleksiyonları için kullanılır.
C# sınıfında bir dizinleyici örneği verebilir misiniz?
Elbette. Özel bir dizi içeren 'Program' sınıfını düşünün. Dizinleyici, bu diziye bir tamsayı indeksi kullanarak erişime izin verir. Örneğin: public string this[int index] { get { return values[index]; } set { values[index] = value; } }.
C#'da bir genel dizinleyici nasıl oluşturulur?
C#'de bir genel indisleyici, bir genel sınıf içinde oluşturulabilir. Örneğin, GenericClass sınıfı, herhangi bir veri türünü işleyebilen bir indisleyici içerir. İndisleyici public T this[int index] { get; set; } şeklinde bildirilmiştir.
C#'da PDF oluşturmayı kolaylaştırmak için dizinleyicileri nasıl kullanabilirsiniz?
IronPDF gibi bir kütüphane kullanarak, indeksörleri bir sınıfta depolanan HTML şablonlarını yönetmek ve erişmek için kullanabilirsiniz ve bunlar daha sonra PDF belgelerine dönüştürülür. Bu yaklaşım, birden fazla HTML kaynağından dinamik PDF'ler oluşturma sürecini basitleştirir.
Bir PDF kütüphanesini bir indeksörle kullanma konusunda bir örnek verebilir misiniz?
Elbette. HTML şablonlarını bir dizide tutan ve bu şablonlara erişmek için bir indeksör kullanan bir sınıf oluşturabilirsiniz. Ardından, bu HTML dizelerini PDF belgelerine dönüştürmek için bir PDF kütüphanesi kullanın. Örneğin, PdfGenerator adlı bir sınıf, HTML'ye erişmek ve PDF'ler oluşturmak için bir indeksör kullanır.
C# dilinde indeksör kullanmanın avantajları nelerdir?
C# dilindeki indeksörler, koleksiyon elemanlarına erişmek için basitleştirilmiş bir sözdizimi sağlar, böylece kodunuz daha sezgisel ve okunabilir hale gelir. Sınıf veya yapılar, diziler gibi davranarak verilerin daha verimli bir şekilde kapsüllenmesini ve erişimini sağlar.
İndeksörler, C# dilinde dinamik veri yapıları oluşturmada nasıl yardımcı olabilir?
İndeksörler, geliştiricilere koleksiyonları dizi benzeri bir sözdizimi kullanarak erişim ve düzenleme yapmayı mümkün kılarak dinamik veri yapıları oluşturma imkanı tanır. Bu, özellikle verilerin esnek bir şekilde yönetilmesi gerektiği senaryolarda, örneğin dinamik PDF içerik üretiminde kullanışlı olabilir.




