Napisałem funkcję w języku C#, która dokonuje numerycznego rozróżnienia. Wygląda to tak:C# Funkcja przechodzenia jako argument
public double Diff(double x)
{
double h = 0.0000001;
return (Function(x + h) - Function(x))/h;
}
Chciałbym być w stanie przejść w dowolnej funkcji, na przykład:
public double Diff(double x, function f)
{
double h = 0.0000001;
return (f(x + h) - f(x))/h;
}
myślę, że to jest możliwe? Delegaci (być może), ale nie jestem pewnie, jak z nich korzystać.
Każda pomoc zostanie bardzo doceniona.
W wersji 3.5 i nowszych funkcje <> i delegatów są wymienialne, co oznacza, że można również używać anonimowych delegatów i lambd (które są syntaktycznym cukrem dla anonimowych delegatów). Nie ma więc znaczenia, czy parametr zostanie określony jako Func, czy delegat, który bierze podwójne i zwraca podwójne. Jedyną realną zaletą, którą daje wymieniony delegat, jest możliwość dodawania komentarzy do xml-doc; opisowe nazwy są równie łatwe do wdrożenia, jak nazwa parametru zamiast typu. –
KeithS
Twierdzę, że prototyp metody nadal sprawia, że kod jest bardziej czytelny niż Func - nie jest to tylko nazewnictwo, które sprawia, że kod jest czytelny i jak mówisz, nie przeszkadza ci to w przekazywaniu kodów lambda do kodu. –
Jeśli nazewnictwo typu delegata jest tak ważne dla jasności kodu, myślę, że w większości przypadków byłbym skłonny do interfejsu i implementacji. –