Использование интерфейса и делегатов при вычислении силы тока и напряжения по закону Ома - C#
Формулировка задачи:
Требуется написать программу с использованием интерфейса и делегатов.
Программа должна считать силу тока и напряжение по закону Ома. Причем, в одном случае резисторы соединены параллельно, а в другом последовательно...
Подскажите как такое реализовать?
Прочитал вот эти темы, но так и не понял как это совместить воедино...
https://msdn.microsoft.com/ru-ru/library/ms173156.aspx
Пример использования интерфейсов разными классами
https://msdn.microsoft.com/ru-ru/library/ms173171.aspx
Для чего нужны делегаты
Как-то так?
delegate double MyDelegate(double current, double voltage); //объявляем делегат
interface IZakonOma //объявляем интерфейс
{
void Amperage(MyDelegate mydelegate, double resistance);
void Voltage(MyDelegate mydelegate, double resistance);
}
class GetParallel : IZakonOma
{
public void Amperage(MyDelegate mydelegate, double resistance)
{
//параллельное соединение | подсчёт силы тока
}
public void Voltage(MyDelegate mydelegate, double resistance)
{
//параллельное соединение | подсчёт напряжения
}
}
class GetConsistent : IZakonOma
{
public void Amperage(MyDelegate mydelegate, double resistance)
{
//последовательное соединение | подсчёт силы тока
}
public void Voltage(MyDelegate mydelegate, double resistance)
{
//последовательное соединение | подсчёт напряжения
}
}
class Program
{
static void Main(string[] args)
{
}
}Решение задачи: «Использование интерфейса и делегатов при вычислении силы тока и напряжения по закону Ома»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ohm_Law {
public delegate double GetOhmResult(params double[] args);
enum OperationType {
GetResultSerial,
GetResultParallel
}
class Program {
static Dictionary<OperationType, GetOhmResult> operations =
new Dictionary<OperationType, GetOhmResult>();
static void FillOperations() {
operations.Add(OperationType.GetResultParallel, (double[] target) => {
if (target.Length == 0) {
return 0;
}
else {
double mult = target.Sum(a => 1.0 / a);
return 1.0 / mult;
}
});
operations.Add(OperationType.GetResultSerial, (double[] target) => {
if (target.Length == 0) {
return 0;
}
else {
return target.Sum();
}
});
}
static void Main(string[] args) {
FillOperations();
double[] ohms_1 = { 200.0, 470.0, 220.0 };
double serialRes = operations[OperationType.GetResultSerial](ohms_1);
double parallelRes = operations[OperationType.GetResultParallel](ohms_1);
}
}
}