Ý nghĩa thực sự của một indexer trong c#

trong c# có một khái miệm là indexer nó giúp cho một class có thể đánh số chỉ mục như một mảng đây là đoạn code vd minh hoa cho khái niệm đó

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MangNhien
{
    class Program
    {
        static void Main(string[] args)
        {
            Stduent s = new Stduent();
            for(int i=0;i<10;i++)
            {
                Console.Write("moi cac ban nhap phan tu cho mang nha :{0}\n ",s[i]);

            }
            Console.ReadKey();
        }
    }
    class Stduent
    {
        private string[] namelist = new string[10];       
        public Stduent()
        {
            for(int i=0;i<10;i++)
            {
                namelist[i] = "do minh nhien";
            }
        }
        public string this[int index]
        {
            get
            {
                return namelist[index];
            }
            set
            {
                namelist[index] = value;
            }
        }

    }
}

nói thật là mình vẫn chưa hiểu ý nghĩ thực sự cảu cái này lắm nó dùng để làm gì .Sao ko dùng ArrayLIst luôn cho nhanh mà cái này vd trong lớp Stduent thì nếu có thêm một thuộc tính như mark nữa mà lại tạo Indexers thì là ko làm được vậy mọi người cho mình hỏi ý nghĩa thực sự của một Indexers là gì khi mà muốn dùng em này>chỉ biểu ddienx được 1 thuộc tính trong một class

Rút gọn code, sử dụng chung 1 convention cho phép custom code vẫn có chung cú pháp với design code được định nghĩa bởi ngôn ngữ

1 Like

@Duong_Act bac cho cao kien di bac

Bạn trình bày lại vấn đề xem, câu cú khó đọc quá :confounded:

2 Likes

Biến đối tượng thành mảng ảo và truy xuất dữ liệu bên trong dựa vào chỉ số (index). Vẫn đảm bảo tính chất bao đóng của hướng đối tượng mà không phải viết từng property cho mỗi dữ liệu.

1 Like

nhưng class đó chỉ áp dụng được cái này khi class đó chỉ có một thuộc tính duy nhất nếu có hai thuộc tính thì chỉ ap dụng được 1 cái

Ai biểu thế ?

public  class MyObject{
    private int A=1;
    private int B=2;
    public int this[int index]{
        get{
              if(index==0) return A;
              if(index==1) return B;
              return 0;
        }
    }
}
public  class MyObject{
    private int A=1;
    private string B="2";
    public object this[int index]{
        get{
              if(index==0) return A;
              if(index==1) return B;
              return null;
        }
    }
}
2 Likes

Tại sao ko google trước khi hỏi :slight_smile:

2 Likes

ok thanh anh em lại serech với từ khác nên hơi củ chuối thanh anh ạ

cái inderxer này cũng giống như get set giá trị 1 biến private thôi đúng ko nhỉ ,có điều là inderxer có thẻ get dc nhiều phần tử của 1 biến dạng mảng phải ko ạ ?

Nó có thêm kiểu truy cập dữ liệu bằng index.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?