C# Academy · Pelajaran

Tipe Kustom yang Mendukung Range

Tambahkan dukungan Index dan Range ke tipe Anda.

Pelajaran 4 dari 413 langkah

Tipe Kustom yang Mendukung Range adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Dua Cara Mendukung Index dan Range

Tipe buatan Anda sendiri dapat memilih untuk mendukung sintaks Index dan Range. Ada dua cara: menyediakan pengindeks eksplisit, atau menyediakan properti Length/Count serta metode Slice.

Pengindeks Index Eksplisit

Tambahkan pengindeks yang menerima System.Index, dan operator ^ akan langsung berfungsi pada tipe Anda.

using System;

class Deck {
    private int[] cards = { 1, 2, 3, 4, 5 };
    public int this[Index i] => cards[i];
}

var d = new Deck();
Console.WriteLine(d[^1]); // 5

Pengindeks Range Eksplisit

Untuk mendukung pengirisan dengan .., tambahkan pengindeks yang menerima System.Range dan mengembalikan tipe irisan yang Anda inginkan.

using System;

class Deck {
    private int[] cards = { 1, 2, 3, 4, 5 };
    public int[] this[Range r] => cards[r];
}

var d = new Deck();
Console.WriteLine(string.Join(",", d[1..3])); // 2,3

Pola Length + Slice

Kompilator juga dapat membuat dukungan rentang secara otomatis jika tipe Anda memiliki properti Count atau Length dan metode Slice(int start, int length).

Menerapkan Pola

Di sini, penyangga kustom menyediakan Length dan Slice. Kompilator menulis ulang buf[1..3] menjadi buf.Slice(1, 2) untuk Anda.

using System;

class Buffer {
    private int[] data = { 10, 20, 30, 40 };
    public int Length => data.Length;
    public int this[int i] => data[i];
    public int[] Slice(int start, int length) {
        var result = new int[length];
        Array.Copy(data, start, result, 0, length);
        return result;
    }
}

var buf = new Buffer();
Console.WriteLine(string.Join(",", buf[1..3])); // 20,30

Mengapa Length Penting

Properti Length (atau Count) memungkinkan kompilator menentukan indeks dari akhir seperti ^1 pada tipe Anda. Tanpa properti tersebut, ^ tidak dapat diterjemahkan.

using System;

class Buffer {
    private int[] data = { 10, 20, 30, 40 };
    public int Length => data.Length;
    public int this[Index i] => data[i.GetOffset(Length)];
}

var buf = new Buffer();
Console.WriteLine(buf[^1]); // 40

Menentukan Index secara Manual

Di dalam pengindeks Index, panggil i.GetOffset(Length) untuk mengubah indeks yang mungkin berasal dari akhir menjadi ofset biasa.

using System;

class Ring {
    private string[] items = { "a", "b", "c" };
    public int Length => items.Length;
    public string this[Index i] {
        get {
            int offset = i.GetOffset(Length);
            return items[offset];
        }
    }
}

var r = new Ring();
Console.WriteLine(r[^2]); // b

Menentukan Range secara Manual

Untuk pengindeks Range, r.GetOffsetAndLength(Length) memberi Anda posisi awal dan jumlah elemen yang akan disalin.

using System;

class Ring {
    private int[] items = { 1, 2, 3, 4, 5 };
    public int Length => items.Length;
    public int[] this[Range r] {
        get {
            var (start, len) = r.GetOffsetAndLength(Length);
            var slice = new int[len];
            Array.Copy(items, start, slice, 0, len);
            return slice;
        }
    }
}

var r = new Ring();
Console.WriteLine(string.Join(",", r[^3..^1])); // 3,4

Count vs Length

Pola ini menerima salah satu nama tersebut: larik dan span menggunakan Length; List<T> menggunakan Count. Salah satu properti tersebut memenuhi persyaratan kompilator.

using System;
using System.Collections.Generic;

var list = new List<int> { 1, 2, 3, 4 };
// List<T> has Count, so Index works:
Console.WriteLine(list[^1]); // 4

Merancang Tipe Pengembalian Slice

Tentukan apakah Slice Anda mengembalikan salinan (seperti larik) atau tampilan (seperti span). Tampilan lebih hemat, tetapi berbagi keadaan yang dapat diubah, jadi dokumentasikan pilihan tersebut.

Tipe Kustom Lengkap

Sequence ini mendukung ^ dan .. melalui pengindeks eksplisit serta properti Length.

using System;

class Sequence {
    private int[] data;
    public Sequence(int[] d) => data = d;
    public int Length => data.Length;
    public int this[Index i] => data[i];
    public int[] this[Range r] => data[r];
}

var s = new Sequence(new[] { 5, 10, 15, 20 });
Console.WriteLine(s[^1]);                       // 20
Console.WriteLine(string.Join(",", s[1..^1]));  // 10,15

Pemeriksaan Singkat

Pastikan Anda memahami hal yang memungkinkan sintaks rentang digunakan pada tipe kustom.

Ringkasan

Anda telah mempelajari dua cara untuk menambahkan dukungan Index/Range ke tipe Anda.

  • Pengindeks eksplisit yang menerima Index dan Range.
  • Pola implisit: properti Count/Length ditambah Slice(int, int).
  • GetOffset(Length) dan GetOffsetAndLength(Length) menentukan posisi dari akhir.
Gratis untuk memulai

Belajar C# dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
93
Pelajaran
346

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tipe Kustom yang Mendukung Range” gratis?

Ya — teks lengkap “Tipe Kustom yang Mendukung Range” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tipe Kustom yang Mendukung Range”?

Tambahkan dukungan Index dan Range ke tipe Anda. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Tipe Kustom yang Mendukung Range” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tipe Index dan Operator ^
  2. Tipe Range dan Operator ..
  3. Range dengan Array dan String
  4. Tipe Kustom yang Mendukung Range
← Kembali ke C# Academy