Компонент — это независимый отдельный модуль, представленный в двоичном формате, имеющий расширение .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
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
//подключить пространство имен
using
System.ComponentModel;
//атрибут объявляющий сборку совместимой с CLS
[assembly: CLSCompliant(
true
)]
namespace
libCounter {
-
//класс реализует интерфейс IDisposable
-
public
class
Counter : IDisposable {
-
//объявляем типы данных, которые поддерживает CLS
-
short
showStart;
-
short
showEnd;
-
decimal
price;
-
public
Counter(
short
arg0,
short
arg1,
decimal
arg2) {
-
showStart = arg0;
-
showEnd = arg1;
-
price = arg2;
-
}
-
public
short
ResultShow() {
-
return
(
short
)(showEnd - showStart);
-
}
-
public
decimal
Sum() {
-
return
Math.Round((
decimal
)(ResultShow() * price), 2);
-
}
-
//переопределяем метод Dispose()
-
public
void
Dispose() {
-
//сборка мусора для всех поколений
-
GC.Collect();
-
}
-
}
}
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
//подключить пространство имен
using
System.ComponentModel;
//атрибут объявляющий сборку совместимой с CLS
[assembly: CLSCompliant(
true
)]
namespace
libCounter {
-
//класс реализует интерфейс IDisposable
-
public
class
Counter : IDisposable {
-
//объявляем типы данных, которые поддерживает CLS
-
short
showStart;
-
short
showEnd;
-
decimal
price;
-
public
Counter(
short
arg0,
short
arg1,
decimal
arg2) {
-
showStart = arg0;
-
showEnd = arg1;
-
price = arg2;
-
}
-
public
short
ResultShow() {
-
return
(
short
)(showEnd - showStart);
-
}
-
public
decimal
Sum() {
-
return
Math.Round((
decimal
)(ResultShow() * price), 2);
-
}
-
//переопределяем метод Dispose()
-
public
void
Dispose() {
-
//сборка мусора для всех поколений
-
GC.Collect();
-
}
-
}
}
Создайте обычный проект. Добавьте ссылку на созданную библиотеку.
Выберите созданный файл с расширением .dll
Ссылка добавлена.
Visual Studio автоматически скопирует файл библиотеки libCounter.dll в папку bin\Debug Вашего проекта.
Внимание! Если Вы создали пустой проект (шаблон Empty), обязательно добавьте ссылку на System.
Внимание! Если Вы создали пустой проект (шаблон Empty), обязательно добавьте ссылку на System.
Введите код.
Main.cs
using
System;
//подключить пространство имен
using
libCounter;
class
Program {
-
public
static
int
Main() {
-
Console.WriteLine(
"Расчет электроэнергии\n"
);
-
Console.Write(
"Начальные показания : "
);
-
short
showStart =
short
.Parse(Console.ReadLine());
-
Console.Write(
"Конечные показания : "
);
-
short
showEnd =
short
.Parse(Console.ReadLine());
-
Console.Write(
"Цена за 1кВт/ч : "
);
-
decimal
price =
decimal
.Parse(Console.ReadLine());
-
//для неявного вызова метода Dispose()
-
using
(Counter C =
new
Counter(showStart, showEnd, price)) {
-
Console.WriteLine(
"Сумма за электроэнергию : {0}"
, C.Sum());
-
}
-
Console.ReadKey();
-
return
0;
-
}
}
using
System;
//подключить пространство имен
using
libCounter;
class
Program {
-
public
static
int
Main() {
-
Console.WriteLine(
"Расчет электроэнергии\n"
);
-
Console.Write(
"Начальные показания : "
);
-
short
showStart =
short
.Parse(Console.ReadLine());
-
Console.Write(
"Конечные показания : "
);
-
short
showEnd =
short
.Parse(Console.ReadLine());
-
Console.Write(
"Цена за 1кВт/ч : "
);
-
decimal
price =
decimal
.Parse(Console.ReadLine());
-
//для неявного вызова метода Dispose()
-
using
(Counter C =
new
Counter(showStart, showEnd, price)) {
-
Console.WriteLine(
"Сумма за электроэнергию : {0}"
, C.Sum());
-
}
-
Console.ReadKey();
-
return
0;
-
}
}
Расчет электроэнергии
Начальные показания : 0
Конечные показания : 100
Цена за 1кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
Начальные показания : 0
Конечные показания : 100
Цена за 1кВт/ч : 0,3084
Сумма за электроэнергию : 30,84