Wskaźniki funkcji pozwala przekazywać funkcje podobne do zmiennych. Wskaźnik funkcji jest w zasadzie starszą metodą przekazywania funkcji w językach, które nie obsługują metod pierwszej klasy, takich jak C/C++.
Metody pierwszej klasy Zasadniczo oznacza to, że można przekazywać funkcje podobne do zmiennych. Metody (luźno) oznaczają funkcje. Oznacza to przede wszystkim funkcje klasy pierwszej: pierwszej klasy, funkcje. Mówiąc najprościej, oznacza to, że funkcje są traktowane jako "pierwsi obywatele", jak zmienne. W dawnych czasach (C/C++), ponieważ nie możemy bezpośrednio przekazać funkcji, a my musieliśmy uciekać się do obejść takich jak wskaźniki funkcji, powiedzieliśmy, że funkcje nie są pierwszorzędnymi obywatelami.
Delegaci to odpowiedź C# na metody najwyższej klasy. Delegaci są nieco mocniejsze, ponieważ wiąże zamknięć, należy rozważyć następujący fragment kodu:
void foo(int a)
{
void bar() { writefln(a); }
call(&bar);
}
void call(void delegate() dg ) { dg(); }
int main(char[][] args) {
foo(100);
}
Uwaga, bar
może odwoływać się do zmiennej lokalnej a
ponieważ delegaci mogą korzystać zamknięć.
Zamknięcia mogą być bardzo mylące na początku. Ale definicja leniwca może być naprawdę prosta. Zasadniczo oznacza to, że zmienna może być dostępna w sposób oczekiwany przez człowieka. Innymi słowy, można odnieść się do zmiennej w miejscach, w których wyglądają, jakby były obecne, poprzez odczytanie struktury kodu źródłowego. Na przykład, patrząc na fragment kodu powyżej.Gdybyśmy nie mieli zamknięcia, bar
nie byłby w stanie odnosić się do a
, ponieważ a
był tylko lokalny dla foo
, ale nie bar
, który jest inną funkcją.
Dynamic Proxy jest dziwny. Nie należy do tych przedmiotów. Objaśnienie wymaga bardzo długiego tekstu. Wynika to ze słynnego Proxy Pattern. Problem z wzorcem proxy polegał na tym, że klasa Proxy musi implementować ten sam interfejs co obiekt. Dynamiczny Proxy oznacza w zasadzie użycie podejścia refleksyjnego w celu odkrycia metody Temat, aby można było zwolnić ProxyPattern z powiązania z interfejsem Tematu.