protected EngineState egnState = EngineState.engineAlive;
public abstract void TurboBoost;
public Car{}
public Car(string name, short max, short curr) {
petName = name; maxSpeed = max; currSpeed = curr;
}
public string PetName {
get { return petName; }
set { petName = value; }
}
public short CurrSpeed {
get { return currSpeed; }
set { currSpeed = value; }
}
public short MaxSpeed { get { return maxSpeed; } }
public EngineState EngineState { get { return egnState; } }
}
}
Теперь предположим, что у вас есть два прямых "наследника" типа Car, имена которых MiniVan (минивэн) и SportsCar (спортивный автомобиль). Каждый из них подходящим образом переопределяет абстрактный метод TurboBoost.
using System;
using System.Windows.Forms;
namespace CarLibrary {
public class SportsCar: Car {
public SportsCar{}
public SportsCar(string name, short max
public override void TurboBoost {
MessageBox.Show("Скорость черепахи!", "Побыстрее бы…");
}
}
public class MiniVan: Car {
public MiniVan{}
public MiniVan(string name, short max, short curr): base(name, max, curr){}
public override void TurboBoost {
// Минивэн с турбонаддувом встретишь не часто!
egnState = EngineState.engineDead;
MessageBox.Show("Звoните в автосервис!", "Машина сломалась…");
}
}
}
Обратите внимание на то, что каждый из подклассов реализует TurboBoost с помощью класса MessageBox, определенного в компоновочном блоке System. Windows.Forms.dll. Чтобы наш компоновочный блок мог использовать типы, определенные в рамках этого внешнего компоновочного блока, для проекта CarLibrary нужно указать ссылку на соответствующий двоичный файл в диалоговом окне Add Reference (Добавление ссылки), доступном в Visual Studio 2005 при выборе Project->Add Reference из меню (рис. 11.6).
Рис. 11.6. Здесь добавляются ссылки на внешние компоновочные блоки .NET
Очень
Замечание. Можно сделать так, чтобы пользовательские компоновочные блоки тоже появлялись в списке диалогового окна Add Reference, если установить их копии в папку C:\Program Files\Microsoft Visual Studio 8\Common7\lDE\PublicAssemblies, но большого смысла в этом нет. На вкладке Recent (Недавние ссылки) предлагается список компоновочных блоков, на которые вы недавно ссылались.
Анализ манифеста
Перед тем как использовать CarLibrary.dll в приложении-клиенте, давайте выясним, из чего скомпонована библиотека программного кода. Предположив, что наш проект уже скомпилирован, загрузим CarLibrary.dll в ildasm.exe (рис. 11.7).
Рис. 11.7. Библиотека CarLibrary.dll в окне ildasm.exe
Теперь откройте манифест файла CarLibrary.dll двойным щелчком на пиктограмме MANIFEST. В первом блоке программного кода манифеста указываются внешние компоновочные блоки, необходимые соответствующему компоновочному блоку для правильного функционирования. Как вы помните, CarLibrary.dll использует типы из mscorlib.dll и System.Windows.Forms.dll, и оба эти файла будут указаны в списке манифеста с помощью лексемы .assembly extern внешних связей компоновочного блока.
.assembly extern mscorlib {
.publickeytoken = (В7 7A 5C 56 19 34 E0 89)
.ver 2:0:0:0
}
.assembly extern System.Windows.Forms {