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

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Yukarıdaki kodda:

  • Program sınıfı, values adlı bir dizi metni içerir.
  • string this[int index], indisçi bildirimidir, burada int index, dizinin elemanlarına erişmek için kullanılan indeks parametreli özelliktir.
  • get erişici belirtilen indeksteki indisli değeri döndürür ve set eriş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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Bu örnekte:

  • StudentRecords sınıfı, öğrencilerin isimlerini tutan özel bir string[] studentNames dizisine sahiptir.
  • Dizin oluşturucu, indeksi dizinin sınırları içinde olup olmadığını kontrol eder.
  • Bir int tü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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

IronPDF'i C# Dizinleyici ile Kullanma

C# İnidiçler (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF

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
$vbLabelText   $csharpLabel

C# İnidiçler (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Konsol Çıkışı

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.

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