Упражнение 1 Что неправильно в следующем коде? Исправьте его: class Instantiator { public t instance; public Instantiator { instance = new T; } } Мы не можем использовать конструктор для создания объекта типа T


Download 13.31 Kb.
Sana24.04.2023
Hajmi13.31 Kb.
#1394088
Bog'liq
Практика


Упражнение 1
Что неправильно в следующем коде? Исправьте его:
class Instantiator
{
public T instance;
public Instantiator()
{
instance = new T();
}
}
Мы не можем использовать конструктор для создания объекта типа T. Если нам нужно создать значение по умолчанию, то для этого необходимо использовать оператор default:
class Instantiator
{
public T instance;
public Instantiator()
{
instance = default(T);
}
}
Упражнение 2
Напишите обобщенный класс, который может хранить в массиве объекты любого типа. Кроме того, данный класс должен иметь методы для добавления данных в массив, удаления из массива, получения элемента из массива по индексу и метод, возвращающий длину массива.

Для упрощения работы можно пересоздавать массив при каждой операции добавления и удаления


Одно из возможных решений:
lass Collection
{
T[] data; // массив с данными
public Collection()
{
data = new T[0];
}
// добавление данных
public void Add(T item)
{
T[] newData = new T[data.Length + 1];
for(int i = 0; i < data.Length; i++)
{
newData[i] = data[i];
}
newData[data.Length] = item;
data = newData;
}
// удаление данных - удаляем первое вхождение элемента при его наличии
public void Remove(T item)
{
// находим индекс элемента
int index = -1;
for(int i = 0; i < data.Length; i++)
{
if (data[i].Equals(item))
{
index = i;
break;
}
}
// удаляем элемент по индексу
if(index > -1)
{
T[] newData = new T[data.Length - 1];
for (int i = 0, j = 0; i < data.Length; i++)
{
if (i == index) continue;
newData[j] = data[i];
j++;
}
data = newData;
}
}
// получение элемента по индексу
public T GetItem(int index)
{
if (index >-1 && index < data.Length)
{
return data[index];
}
else
throw new IndexOutOfRangeException();
}
public int Count()
{
return data.Length;
}


Пример применения:
Collection numbers = new Collection();
numbers.Add(1);
numbers.Add(3);
numbers.Add(5);
numbers.Remove(2); // попытка удалить элемента, которого нет в коллекции
numbers.Remove(3);
for (int i = 0; i < numbers.Count(); i++)
{
Console.WriteLine(numbers.GetItem(i));
}

Download 13.31 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling