.NET 4.x интерфейс, передача функции в параметре - C#
Формулировка задачи:
Всем здравствуйте. У меня возникла следующая проблема. До этого я ни когда не работал с интерфейсами.
Есть интерфейс и функция, которая по нему выполняет расчет.
Я реализовал интерфейс(функцию).
И потом пытаюсь передать функцию в качестве параметра в другую функцию, что я делаю не так?
Ошибка 1 Наиболее подходящий перегруженный метод для "РасчетТурбины.MathUtil.HalfSegmentCalc(РасчетТурбины.IMainFunc, double, double, double)" имеет несколько недопустимых аргументов D:\UserFiles\Мои документы\Visual Studio 2012\Projects\РасчетТурбины\РасчетТурбины\Calculete.cs 216 24 РасчетТурбины
Ошибка 2 Аргумент "1": преобразование типа из "группа методов" в "РасчетТурбины.IMainFunc" невозможно D:\UserFiles\Мои документы\Visual Studio 2012\Projects\РасчетТурбины\РасчетТурбины\Calculete.cs 216 49 РасчетТурбины
public interface IMainFunc
{
double MainFunc(double x);
}
class MathUtil
{
public static int HalfSegmentCalc(IMainFunc _imf, double xa, double xb, double Epsilon)
{
double ya;
double yb;
double yc, xc;
do
{
ya = _imf.MainFunc(xa);
yb = _imf.MainFunc(xb);
...
return (int) ((xa + xb) / 2);
if (ya * yb > 0)
{
throw new Exception("Нет корней.");
}
....
yc = _imf.MainFunc(xc);
....
} while (true);
}
}
.....
.....
public class FunRunCalc_1 : IMainFunc
{
public double MainFunc(double x)
{
double N_p_gg = Calculete.m_o * (x + Calculete.del_p_mag_o - Calculete.p_1_o) / (Calculete.kpd_n_o * Calculete.ro_o) +
Calculete.m_g * (x + Calculete.del_p_mag_g - Calculete.p_1_g) / (Calculete.kpd_n_g * Calculete.ro_g);
double N_t_p_gg = Calculete.R * Calculete.T_0 * (1 - Math.Pow((Calculete.p_k + Calculete.del_p_mag_t2) / (x - Calculete.del_p_mag_t1), (Calculete.k - 1) / Calculete.k)) * Calculete.m_t * Calculete.kpd_t * Calculete.k / (Calculete.k - 1);
return N_p_gg - N_t_p_gg;
}
}
....
//и потом пытаюсь передать MainFunc в другую функцию
double d = MathUtil.HalfSegmentCalc(FunRunCalc_1.MainFunc, 0, 100000000, 1);
...Решение задачи: «.NET 4.x интерфейс, передача функции в параметре»
textual
Листинг программы
double d = MathUtil.HalfSegmentCalc(new FunRunCalc_1(), 0, 100000000, 1);