Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C++_CLI.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
8.1 Mб
Скачать

36.5.3Вставка элемента

Метод IList::Add() добавляет новый элемент в конец списка. Иногда требуется вставить новый элемент где-то внутрь списка. Для поддержки этой операции IList предоставляет метод с именем Insert. Его синтаксис:

void Insert(int index, Object^ value);

Значение value должно быть вставлено в позицию index списка и value должно быть корректным, допустимым. Так как тип valueObject ^ , а коллекция может содержать элементы различных типов, вам может понадобиться приведение типа параметра к Object.

Как уже упоминалось ранее для метода Add(), есть несколько вещей, которые вы должны знать об этой операции:

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

  • Если значение аргумента value не является действительным, опять же в зависимости от того, как вы сконструировали свой класс, элемент либо не будет вставлен или что-то еще пойдет не так. К счастью, если значение value типа класса, который вы создали сами, компилятор будет выдавать ошибку, давая вам знать, что аргумент держит значение некорректное значение. Например, пусть value является объектом класса CStudent, который имеет элемент целого типа age (возраст). Если присвоить строку, например, CStudent::Age ="Раймонда", возникнет ошибка и поэтому этот объект не будет вставлен в коллекцию класс.

36.5.4Упражнение

  1. Access the Properties.cpp source file. In the Scopes combo box of the Code Editor, select CProperties and, in the Functions combo box, select Insert

  2. Implement the Insert() method as follows:  

// This method can be used to insert an item at a

// certain position inside the collection

void CProperties::Insert(int index, Object ^ value)

{

if( (counter <= RentalProperties->Length) &&

(index < Count) && (index >= 0) )

{

counter++;

for(int i = Count - 1; i > index; i--)

RentalProperties[i] = RentalProperties[i - 1];

RentalProperties[index] = value;

}

}

  1. Open the Exercise.cpp source file and change it as follows:  

#include "RentalProperty.h"

#include "Properties.h"

using namespace System;

Int main()

{

CProperties ^ properties = gcnew CProperties;

CRentalProperty ^ rental = nullptr;

. . . No Change

rental = gcnew CRentalProperty;

rental->PropertyCode = 592795;

rental->PropertyType = PropertyTypes::SingleFamily;

rental->PropertyCondition = PropertyConditions::Good;

rental->Bedrooms = 3;

rental->Bathrooms = 2.00;

rental->MonthlyRent = 1870.35;

properties->Insert(2, rental);

Console::WriteLine(L"<+> Solas Properties Rental <+>");

Console::WriteLine(L"<-> Properties Listing <->");

for(int i = 0; i < properties->Count; i++)

{

Console::WriteLine(L"---------------------------");

Console::WriteLine(L"{0}. Property Details",

(i+1).ToString());

Console::WriteLine(L"Property #: {0}",

properties->Get(i)->PropertyCode);

Console::WriteLine(L"Property Type: {0}",

properties->Get(i)->PropertyType);

Console::WriteLine(L"Condition: {0}",

properties->Get(i)->PropertyCondition);

Console::WriteLine(L"Bedrooms: {0}",

properties->Get(i)->Bedrooms);

Console::WriteLine(L"Bathrooms: {0}",

properties->Get(i)->Bathrooms);

Console::WriteLine(L"Monthly Rent: {0}",

properties->Get(i)->MonthlyRent);

}

Console::WriteLine(L"================================");

return 0;

}

  1. Execute the application to see the result  

<+> Solas Properties Rental <+>

<-> Properties Listing <->

---------------------------

1. Property Details

Property #: 737495

Property Type: Apartment

Condition: Good

Bedrooms: 1

Bathrooms: 1

Monthly Rent: 950

---------------------------

2. Property Details

Property #: 293749

Property Type: SingleFamily

Condition: Excellent

Bedrooms: 5

Bathrooms: 3.5

Monthly Rent: 2550.75

---------------------------

3. Property Details

Property #: 592795

Property Type: SingleFamily

Condition: Good

Bedrooms: 3

Bathrooms: 2

Monthly Rent: 1870.35

---------------------------

4. Property Details

Property #: 224006

Property Type: Apartment

Condition: Excellent

Bedrooms: 2

Bathrooms: 1

Monthly Rent: 1250.55

---------------------------

5. Property Details

Property #: 197249

Property Type: Townhouse

Condition: BadShape

Bedrooms: 4

Bathrooms: 2.5

Monthly Rent: 1750.65

================================

Press any key to continue . . .

  1. Close the DOS window and return to your programming environment