класс компонента реализует интерфейс IDisposable

Компонент — это независимый отдельный модуль, представленный в двоичном формате, имеющий расширение .dll и предназначенный для многократного использования.
Требуется подключить пространство имен 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();
  •   }
  •  }
  • }
Создайте обычный проект. Добавьте ссылку на созданную библиотеку.
Выберите созданный файл с расширением .dll
Ссылка добавлена.
Visual Studio автоматически скопирует файл библиотеки libCounter.dll в папку bin\Debug Вашего проекта.

Внимание! Если Вы создали пустой проект (шаблон 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;
  •  }
  • }
Расчет электроэнергии

Начальные показания : 0
Конечные показания : 100
Цена за 1кВт/ч : 0,3084
Сумма за электроэнергию : 30,84