2013-02-24 5 views
0

Я новый разработчик C#, и я программировал через 2 месяца. Теперь я пришел к той части, где хочу создать собственный класс коллекции, но у меня есть несколько проблем.создание собственного класса коллекции

Что я хочу делать? - Я хочу создать собственный класс коллекций (список) для хранения данных. Мой класс должен иметь методы для добавления элемента в конец списка или удаления элемента из списка.

  • Мой класс должен иметь свойства для количества элементов в списке и емкости iist.

  • Я должен сохранить список в массиве внутри моего класса, и aray должен иметь предопределенную длину.

поэтому сначала я хочу, чтобы создать дизайн и записать, как мой класс должен выглядеть, где я только записать все то, что мне нужно, как методы, свойства, и это то, что ив сделал до сих пор:

public void Propertie() // depending on how many items I have, I create an propertie for each item 
     { 

     } 
     public void addItems() // method for adding items 
     { 

     } 

     public void removeItems() // method for removing items 
     { 

     } 

     int[] storeList; // array for storing the list 
    } 

Итак, прежде чем я начну использовать реальное кодирование, я просто хочу знать, пропустил я или сделал что-то не так?

Редактировать: Мне не разрешено использовать какой-либо набор C# или общие классы в этом назначении.

+1

Какова ваша цель? Почему, по-вашему, требуется создание собственного класса коллекции? – Adil

ответ

1

Я просто хочу знать, пропустил я или сделал что-то не так?

Дизайн, который вы показываете здесь, отсутствует в нескольких вещах. Сначала вы сказали, что хотите создать общий список. Как вы собираетесь хранить общие данные в целочисленном массиве?

Кроме того, подпись вы даете для addItems является

public void addItems() 

и подпись вы даете для removeItems является

public void removeItems() 

Как список ваш объект знает, что добавить, если это не учитывая любые данные? Точно так же, как он знает, что удалить, если клиентский код не говорит об этом (вы всегда можете удалить первый элемент или всегда удалять последний элемент, но тогда вы находитесь в области стека или очереди, а не в стандартном объекте -ориентированный список API).

Я бы рекомендовал посмотреть API для System.Collections.Generic.List, который является встроенным классом, который вы должны пытаться подражать здесь. Вам не нужно реализовывать все свойства и методы, которые реализует List, но вы должны реализовать части этого API. Я бы порекомендовал

public sealed class MyList<T> 
{ 
    public int Count { get; } 
    public T this[int index] { get; set; } 
    public MyList(); 
    public void Add(T item); 
    public void RemoveAt(int index); 
} 

как минимальный API API для класса списка. Вы реализуете его, объявив поле типа T[] в качестве хранилища резервных копий, а также внутреннее поле size. Не забывайте, что если код клиента добавляет больше элементов, чем длина хранилища резервных копий, вам нужно выделить новый массив хранилища (возможно, вдвое больше старого), скопировать элементы в новый массив и запустить обрабатывая новый массив в качестве хранилища.

Вы также должны изучить реализацию System.Collections.Generic.IEnumerable, что не является абсолютно необходимым, но делает класс коллекции более полезным.

0

Предполагая, что вы уверены в себе, что вы действительно хотите сделать это, вы должны рассмотреть следующие вопросы:

  1. Какие вы собираетесь поддерживать (вы говорите, общий, но есть целочисленный массив в вашем примере
  2. Как вы собираетесь поддерживать доступ и итерацию (например, поддерживаете ли вы foreach, стиль массива [])
  3. как программист укажет длину (вы говорите, фиксированная длина, программирование указывает, что спереди, есть ли по умолчанию)
  4. Поддерживаете ли вы методы поиска , методы сортировки и т. д.
  5. Может ли программист копировать одну коллекцию в другую большую коллекцию? Меньше?
  6. Вы собираетесь поддерживать ФИФО, ЛИФО, двунаправленную итерацию, и т.д ...

Создание хорошей родовой коллекции будет трудно, поэтому я рекомендую вам взглянуть на все, что вы хотели бы коллекция для поддержки и идти оттуда.

Итак, да, ваши первоначальные мысли еще неполны. Как минимум, ему нужен метод доступа к данным и знать, сколько данных существует.

0

вы можете реализовать интерфейс IList<T>, он содержит все необходимые подписи для создания собственного общего класса списка. MSDN documentation for IList