Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обобщенный класс реализующий интерфейс IList<T> 
V
    Опции темы
Alexandr507
Дата 17.1.2010, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: нет
Всего: -1



Дана задача:

Цитата
Создайте обобщенный класс по имени ShortCollection<T>, реализующий 
IList<T> и состоящий из коллекции элементов с максимальным размером. 
Этот максимальный размер должен иметь вид целого числа, которое могло бы 
предоставляться конструктору ShortCollection<T> или по умолчанию  
устанавливаться в 10.  Конструктор должен также быть способным принимать  
первоначальный список элементов через параметр List<T>.  Сам класс должен  
функционировать точно так же, как Collection<T>, но генерировать исключение типа 
IndexOutOf RangeException при попытке добавить в коллекцию слишком много 
элементов или при наличии слишком большого количества элементов в  
переданном конструктору списке List<T>. 


Я начал написание класса
где у меня X является некоторый класс Animal  который является базовым классом для еще нескольких классов, написал четыре конструктора, объявил закрытый член - класс коллекция и свойство для доступа к нему
 у меня такой вопрос, при наследовании интерфейса как задано в задачи, нужно реализовывать все его методы?  насколько я понимаю да. Будьте так добры подскажите  как реализовать методы, тема для меня новая, с трудом дается, может быть вообще не правильно начал класс писать

Код


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

namespace ConsoleApplication25
{
    class ShortCollection<X> : IList<X> where X : Animal
    {

        private List<X> ani = new List<X>();
        public List<X> Ani
        {
            get
            {
                return ani;
            }
        }

        public ShortCollection() 
        {
            ani.Capacity = 10;
        } 


        public ShortCollection(int x) 
        {
            ani.Capacity = x;
        }

        public ShortCollection(IEnumerable<X> list)
        {
            ani.AddRange(list);
        }

        public ShortCollection(IEnumerable<X> list, int x)
        {
            ani.Capacity = x;
            ani.AddRange(list);
        }

        public int Capacity 
        {
            get 
            {
                return Capacity;
            }
            set 
            {
                Capacity = value;
            }
        }
     
        
        public IEnumerator<X> GetEnumerator()
        {
            return ani.GetEnumerator();
        }
        
        IEnumerator IEnumerable.GetEnumerator()
        {
            return ani.GetEnumerator();
        }

        public void Add(X item) 
        {
            ani.Add(item);
        }

       
        public int Count 
        {
            get 
            {
                return ani.Count;
            }
        }

        public void Clear() 
        {
            ani.Clear();
        }

        


    
    }
}





PM MAIL   Вверх
Heinzz
Дата 17.1.2010, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Правой кнопкой мышки надо щелкнуть на наследуемом классе/интерфейсе, появится окошечко -извлечь интерфейс, жмем => в создаваемый класс автоматически добавляются все члены интерфейса. Реализуем те которые будут использоваться, остальные можно оставить с выбросом ошибки. Логично использовать методы базового класса при наследовании.


--------------------
user posted image
PM MAIL   Вверх
Alexandr507
Дата 19.1.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: нет
Всего: -1



Благодарю
PM MAIL   Вверх
KuMa1104
Дата 19.1.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



Ам.... сам не когда не использовал подобные конструкции. Но стало интересно.

А можно пример когда это нужно, создавать строго типизированный класс? 


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
KelTron
Дата 20.1.2010, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Цитата(KuMa1104 @  19.1.2010,  18:52 Найти цитируемый пост)
строго типизированный класс


Ты хотел сказать "параметиризированный" ..)

Разве пример в этой теме тебя не устраивает?


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
KuMa1104
Дата 21.1.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



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




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Heinzz
Дата 22.1.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Например, хотим чтобы наш класс мог быть отсортирован в к-либо коллекции или массиве. Сортировщику необходимо знать как наш класс сортировать, по какому принципу. 
Код

 class Person : IComparable
    {
        public string name;
        public int age;
               
        #region IComparable Members

        public int CompareTo(object obj)
        {
            return this.name.CompareTo(((Person)obj).name);
        }
        #endregion
    }


можно реализовать более сложные принципы сортировки, например, фамилия-имя-возраст


--------------------
user posted image
PM MAIL   Вверх
KelTron
Дата 22.1.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Heinzz,  ты о чём вообще? Вопрос был про параметизированные классы...

KuMa1104, ну, например, когда тебе нужно сделать обобщённую коллекцию, известные примеры -  коллекции из System.Collections.Generic.List, System.Collections.Generic.Dictionary и тд.
Чтобы не писать идентичный код, который отличается только типом используемого объекта.

Это сообщение отредактировал(а) KelTron - 22.1.2010, 19:02


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Heinzz
Дата 23.1.2010, 10:48 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Цитата(KelTron @  22.1.2010,  19:00 Найти цитируемый пост)
Heinzz,  ты о чём вообще? Вопрос был про параметизированные классы...

кто про что а я все про интерфейсы.....

Это сообщение отредактировал(а) Heinzz - 23.1.2010, 20:35


--------------------
user posted image
PM MAIL   Вверх
KuMa1104
Дата 23.1.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



Цитата(KelTron @  22.1.2010,  19:00 Найти цитируемый пост)
KuMa1104, ну, например, когда тебе нужно сделать обобщённую коллекцию, известные примеры -  коллекции из System.Collections.Generic.List, System.Collections.Generic.Dictionary и тд.
Чтобы не писать идентичный код, который отличается только типом используемого объекта.

Хм ясно, надо будет про это дело почитать)



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.