Odpowiedz

13

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.

0

tylko te, wiem o:

  • wskaźników funkcji: wystarczy, że wskaźnik do kawałka kodu. skaczesz do niego, to się wykonuje. języki pisane na klawiaturze mogą wymuszać pewne konwencje przekazywania parametrów (tj. deklaracje C)
  • Zamknięcia: funkcja z pewnym stanem sparowanym. najbardziej naturalnie napisane w językach o zasięgu leksykalnym (np. Scheme, JavaScript, Lua). kilka zamknięć może współdzielić ten sam stan (lub jego część), dzięki czemu jest to łatwy sposób na wdrożenie OOP.
  • Metody pierwszej klasy: zamknięcie utworzone z instancji obiektu i metody. niektóre języki z zamknięciami i natywnym OOP (Python, JavaScript) mogą automatycznie tworzyć zamknięcia.
0

Zamknięcie to koncepcja języka programowania. Delegat jest jego realizacją w MS.NET.

Delegat w MS.NET jest silnie wpisanym wskaźnikiem do metody obiektu (instancja delegata wskazuje zarówno na obiekt, jak i na jego metodę). Istnieje również sposób na połączenie kilku pustych instancji delegatów w jeden.

Powiązane problemy