C# İndeksleyiciler (Geliştiriciler İçin Nasıl Çalışır)
Bir C#'te indisçi, bir sınıf veya yapı örneklerinin dizi erişim operatörü [] kullanılarak erişilmesini sağlayan özel bir özellik türüdür. Dizin oluşturucular, 'akıllı diziler' oluşturmak veya verileri basitleştirilmiş bir sözdizimi ile kapsüllerken çok faydalı olabilir. Sınıf örneklerini, dizilerde yaptığınız gibi bir indeks aracılığıyla veriye erişmek için kullanmanızın bir yolunu sağlarlar. Bu makale, pratik örneklerle C# dizin oluşturucularını nasıl tanımlayıp kullanacağınızı keşfedecek. Ve makalenin sonunda IronPDF kütüphanesini de keşfedeceğiz.
Temel Dizin Oluşturucu Söz Dizimi
Bir indisçi, sınıf veya yapı içinde this anahtar kelimesi kullanılarak tanımlanan bir örnek üyesidir, ardından indisçi bildirimi gelir. Ayrıca parametre türlerini ve dönüş türünü de belirtirsiniz. Bir dizin oluşturucu örnek üye için genel söz dizimi şu şekildedir:
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 indisçinin döndüreceği değer türüdür, örneğin bir tamsayı değeri gibi ve parameter_type, genellikle bir int olan indeksi türüdür. get erişici belirtilen indeksteki değeri döndürür ve set blok kodu erişici o indekse bir değer atar.
Dizin Oluşturucu Tanımlama ve Kullanımı
Bir C# sınıfı içinde bir dizin oluşturucun uygulanmasının basit bir örneğini inceleyeceğiz. Bir dizi metni 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 metni içerir.string this[int index], indisçi bildirimidir, buradaint index, dizinin elemanlarına erişmek için kullanılan indeks parametreli özelliktir.geterişici belirtilen indeksteki indisli değeri döndürür veseterişici o indekse bir indisli değer atar.
Bu, Program sınıfının bir örneğini oluşturabileceğiniz ve dizisini indeks kullanarak erişebileceğiniz anlamına gelir, şu ş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, indirçin dizisine erişim için basit bir sözdizimi sağladığını, bir dizideki elemanlara nasıl erişeceğinizle benzer şekilde gördüğünüzü görebilirsiniz.
get ve set Erişicileri Anlama
Indisçi içindeki get ve set erişicileri, verileri elde etmenizi ve atamanızı sağlayan özelliklerle benzer şekilde çalışan blok koddur. Temel fark, dizin oluşturucuların, bireysel veri üyeleri yerine veri koleksiyonları üzerinde çalışmak için bir dizin parametresini kullanmasıdır.
get bloğu belirtilen indeksteki veriyi döndürmekle sorumludur, oysa set bloğu, belirtilen indeks için veriyi atar. İşte anlamanızı 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.- Dizin oluşturucu, indeksi 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 Dizin Oluşturucu Oluşturma
Dizin oluşturucular içeren genel sınıflar da oluşturabilirsiniz, böylece kodunuz birden fazla veri türünü işleyebilir. İşte genel bir dizin oluşturan basit bir genel sınıf ö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ışabilen bir indirç tanımlar.
this[int index]indirçi, türden bağımsız olarak dizideki elemanlara erişmenizi sağlar.
Artık GenericClass farklı veri türleriyle 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'i C# Dizinleyici ile Kullanma

IronPDF, .NET uygulamalarında PDF oluşturma, düzenleme ve dönüştürme işlemleri için tasarlanmış bir C# kütüphanesidir. PDF'lerle çalışmayı geliştiriciler için HTML'den PDF oluşturma, PDF dosyalarını manipüle etme ve birleştirme, yazdırma ve programatik şekilde imza ekleme gibi ileri işlevler için basitleştirir.
IronPDF'den yararlanarak dizin oluşturucuların kullanıldığı C# programlarınızda dinamik olarak PDF içerik oluşturabilir ve yönetebilirsiniz. Örneğin, HTML dizgilerini tutan bir sınıfınız olduğunu ve bir dizin oluşturucu kullanarak her HTML girdisi için PDF oluşturmak istediğinizi varsayalım. Bu yaklaşım, PDF oluşturmayı 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# dizin oluşturucuları, sınıflarınızı ve yapılarınızı dizi gibi davranan bir yardımcı özelliktir. Basitleştirilmiş sözdizimi ve esnek veri erişimi sağlayarak, daha sezgisel ve okunabilir kodlar oluşturabilirsiniz. Dizeler, tamsayılar veya başka herhangi bir veri türüyle çalışıyor olun, dizin oluşturucular, veri yapınızı kapsüllemenizi ve temiz ve etkili bir şekilde indeksler kullanarak erişmenizi sağlar.
IronPDF, gerekli tüm özelliklere erişim sağlayarak, PDF oluşturma, düzenleme ve görüntüleme işlemlerini gerçekleştirmeye yönelik bir ücretsiz deneme ile başlamayı kolaylaştırır. Yazılımı keşfederken acele etmenize gerek yok, memnun kaldığınızda lisanslar $999'dan başlayarak mevcuttur.
Sıkça Sorulan Sorular
C#'ta bir dizinleyici nedir?
C#'ta bir dizinleyici, bir sınıf veya yapı örneklerinin dizi erişim operatörü [] kullanılarak erişilmesine olanak tanıyan özel bir tür özelliktir. Sınıf örneklerini diziler gibi kullanmanın bir yolunu sağlar.
C#'ta temel bir dizinleyici nasıl ilan edilir?
C#'ta temel bir dizinleyici, dizinleyici beyannamesinin ardından 'this' anahtar kelimesi kullanılarak ilan edilir. Parametre türlerini ve dönüş türünü belirtmeniz gerekir. Örneğin: public return_type this[parameter_type index] { get; set; }.
'get' ve 'set' erişimcilerinin bir dizinleyicideki amacı nedir?
Bir dizinleyicideki 'get' erişimci, belirtilen bir dizindeki verileri almak için kullanılırken, 'set' erişimci belirtilen bir diziye veri atamak için kullanılır. Mülkiyet erişimcilerine benzer şekilde çalışırlar ancak veri koleksiyonları için kullanılırlar.
C# sınıfında bir dizinleyici örneği verebilir misiniz?
Elbette. Özel bir string dizi içeren 'Program' sınıfını düşünün. Dizinleyici, bu diziye bir tamsayı dizini kullanarak erişim sağlar. Örneğin: public string this[int index] { get { return values[index]; } set { values[index] = value; } }.
C#'ta genel bir dizinleyici nasıl oluşturulur?
C# içinde genel bir indeksleyici, genel bir sınıf içinde oluşturulabilir. Örneğin, GenericClass sınıfı, herhangi bir veri türünü işleyebilen bir indeksleyici içerir. İndeksleyici, public T this[int index] { get; set; } şeklinde bildirilmiştir.
C#'ta PDF üretimini kolaylaştırmak için dizinleyiciler nasıl kullanılabilir?
IronPDF gibi bir kütüphane kullanarak, bir sınıf içinde depolanan HTML şablonlarını yönetmek ve erişmek için dizinleyiciler kullanabilirsiniz, ardından bunlar 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.
PDF kütüphanesi ile dizinleyici kullanımına bir örnek verebilir misiniz?
Elbette. Bir dizi içinde HTML şablonlarını tutan bir sınıf oluşturabilir ve bu şablonları dizinleyici kullanarak erişebilirsiniz. Ardından, bir PDF kütüphanesi kullanarak bu HTML stringlerini PDF belgelerine dönüştürürsünüz. Örneğin, PdfGenerator adlı bir sınıf, HTML'ye erişmek ve PDF oluşturmak için bir dizinleyici kullanır.
C#'ta dizinleyici kullanmanın avantajları nelerdir?
C#'taki dizinleyiciler, bir koleksiyondaki öğelere erişim için basitleştirilmiş bir sözdizimi sağlar, bu da kodunuzu daha sezgisel ve okunabilir hale getirir. Sınıfların ve yapıların diziler gibi davranmasına izin ederek, verilerin etkin bir şekilde kapsüllenmesini ve erişimini sağlarlar.
C#'ta dinamik veri yapıları oluşturmada dizinleyiciler nasıl yardımcı olabilir?
Dizinleyiciler, dizi benzeri bir sözdizimi kullanarak koleksiyonların erişilebilir ve değiştirilebilir olmasını sağlayarak geliştiricilerin dinamik veri yapıları oluşturmasına olanak tanır. Bu, özellikle verilerin esnek bir şekilde yönetilmesi gerektiği senaryolarda, örneğin dinamik PDF içerik oluşturulmasında, faydalı olabilir.




