Компонент — это независимый отдельный модуль, представленный в двоичном формате, имеющий расширение .dll и предназначенный для многократного использования.
Требуется подключить пространство имен System.ComponentModel.
Класс компонента должен реализовывать интерфейс IComponent, но, что бы не усложнять себе жизнь, альтернативным вариантом является сделать его производным от класса Component, который наследует интерфейс IComponent по умолчанию.
Класс Component переопределяет метод Dispose(), который находится в интерфейсе IDisposable.
Класс Component реализует интерфейс IDisposable и переопределяет метод Dispose(), который освобождает любые ресурсы, которые использует компонент.
В программе, которая использует компонент, нужно явно вызывать метод Dispose(), после того, как объект класса компонента больше не нужен.
Что бы не вызвать метод Dispose() явно, участок кода нужно поместить в блок using, где этот метод будет вызван автоматически.
Нужно добавить атрибут [assembly:CLSCompliant(true)], который объявляет сборку совместимой со средой CLS.
Требуется подключить пространство имен System.ComponentModel.
Класс компонента должен реализовывать интерфейс IComponent, но, что бы не усложнять себе жизнь, альтернативным вариантом является сделать его производным от класса Component, который наследует интерфейс IComponent по умолчанию.
Класс Component переопределяет метод Dispose(), который находится в интерфейсе IDisposable.
Класс Component реализует интерфейс IDisposable и переопределяет метод Dispose(), который освобождает любые ресурсы, которые использует компонент.
В программе, которая использует компонент, нужно явно вызывать метод Dispose(), после того, как объект класса компонента больше не нужен.
Что бы не вызвать метод Dispose() явно, участок кода нужно поместить в блок using, где этот метод будет вызван автоматически.
Нужно добавить атрибут [assembly:CLSCompliant(true)], который объявляет сборку совместимой со средой CLS.
В Visual Studio выберите тип шаблона Class Library. Назовите проект, например libCounter.
Visual Studio создала проект.
Переименуйте имя класса в Counter. Выделите имя класса. Кликните правой кнопкой мыши. Refactor. Rename…
Введите имя класса Counter.
Введите код. Скомпилируйте и получите файл с расширением .dll
Class1.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;//подключить пространство именusingSystem.ComponentModel;//атрибут объявляющий сборку совместимой с CLS[assembly: CLSCompliant(true)]namespacelibCounter {-
//класс реализует интерфейс IDisposable -
publicclassCounter : IDisposable { -
//объявляем типы данных, которые поддерживает CLS -
shortshowStart; -
shortshowEnd; -
decimalprice; -
publicCounter(shortarg0,shortarg1,decimalarg2) { -
showStart = arg0; -
showEnd = arg1; -
price = arg2; -
} -
publicshortResultShow() { -
return(short)(showEnd - showStart); -
} -
publicdecimalSum() { -
returnMath.Round((decimal)(ResultShow() * price), 2); -
} -
//переопределяем метод Dispose() -
publicvoidDispose() { -
//сборка мусора для всех поколений -
GC.Collect(); -
} -
} }
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;//подключить пространство именusingSystem.ComponentModel;//атрибут объявляющий сборку совместимой с CLS[assembly: CLSCompliant(true)]namespacelibCounter {-
//класс реализует интерфейс IDisposable -
publicclassCounter : IDisposable { -
//объявляем типы данных, которые поддерживает CLS -
shortshowStart; -
shortshowEnd; -
decimalprice; -
publicCounter(shortarg0,shortarg1,decimalarg2) { -
showStart = arg0; -
showEnd = arg1; -
price = arg2; -
} -
publicshortResultShow() { -
return(short)(showEnd - showStart); -
} -
publicdecimalSum() { -
returnMath.Round((decimal)(ResultShow() * price), 2); -
} -
//переопределяем метод Dispose() -
publicvoidDispose() { -
//сборка мусора для всех поколений -
GC.Collect(); -
} -
} }
Создайте обычный проект. Добавьте ссылку на созданную библиотеку.
Выберите созданный файл с расширением .dll
Ссылка добавлена.
Visual Studio автоматически скопирует файл библиотеки libCounter.dll в папку bin\Debug Вашего проекта.
Внимание! Если Вы создали пустой проект (шаблон Empty), обязательно добавьте ссылку на System.
Внимание! Если Вы создали пустой проект (шаблон Empty), обязательно добавьте ссылку на System.
Введите код.
Main.cs
usingSystem;//подключить пространство именusinglibCounter;classProgram {-
publicstaticintMain() { -
Console.WriteLine("Расчет электроэнергии\n"); -
Console.Write("Начальные показания : "); -
shortshowStart =short.Parse(Console.ReadLine()); -
Console.Write("Конечные показания : "); -
shortshowEnd =short.Parse(Console.ReadLine()); -
Console.Write("Цена за 1кВт/ч : "); -
decimalprice =decimal.Parse(Console.ReadLine()); -
//для неявного вызова метода Dispose() -
using(Counter C =newCounter(showStart, showEnd, price)) { -
Console.WriteLine("Сумма за электроэнергию : {0}", C.Sum()); -
} -
Console.ReadKey(); -
return0; -
} }
usingSystem;//подключить пространство именusinglibCounter;classProgram {-
publicstaticintMain() { -
Console.WriteLine("Расчет электроэнергии\n"); -
Console.Write("Начальные показания : "); -
shortshowStart =short.Parse(Console.ReadLine()); -
Console.Write("Конечные показания : "); -
shortshowEnd =short.Parse(Console.ReadLine()); -
Console.Write("Цена за 1кВт/ч : "); -
decimalprice =decimal.Parse(Console.ReadLine()); -
//для неявного вызова метода Dispose() -
using(Counter C =newCounter(showStart, showEnd, price)) { -
Console.WriteLine("Сумма за электроэнергию : {0}", C.Sum()); -
} -
Console.ReadKey(); -
return0; -
} }
Расчет электроэнергии
Начальные показания : 0
Конечные показания : 100
Цена за 1кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
Начальные показания : 0
Конечные показания : 100
Цена за 1кВт/ч : 0,3084
Сумма за электроэнергию : 30,84