리스트 한번 구현해보니까 제네릭이랑 인덱서는 확실히 이해 됬다


 class My_List<T>

    {

        T[] my_arr = new T[0];


        public void Add(T elemets)

        {

            T[] new_arr = new T[my_arr.Length+1];


            for (int i = 0; i < my_arr.Length; i++)

            {

                new_arr[i] = my_arr[i];

            }


            new_arr[my_arr.Length] = elemets;


            my_arr = new_arr;

        }

        public int Count()

        {

            return my_arr.Length;

        }


        public void RemoveAt(int index)

        {

            if(index<0 || index >= my_arr.Length)

            {

                throw new Exception("인덱스 범위 넘어감");

                return;

            }


            T[] new_arr = new T[my_arr.Length - 1];


            int check = 0;

            for (int i = 0; i < my_arr.Length-1; i++)

            {

                if (i == index)

                {

                    check = 1;

                }

                new_arr[i] = my_arr[i+check];

            }


            my_arr = new_arr;

        }


        public T this[int index]

        {

            get

            {

                if (index < 0 || index >= my_arr.Length)

                {

                    throw new Exception("인덱스 범위 넘어감");

                }

                else

                {

                    return my_arr[index];

                }

            }

            set

            {

                if (index < 0 || index >= my_arr.Length)

                {

                    throw new Exception("인덱스 범위 넘어감");

                }

                else

                {

                    my_arr[index] = value;

                }

            }

        }

    }