Mechanizm refleksji: Różnice pomiędzy wersjami
[wersja nieprzejrzana] | [wersja przejrzana] |
Usunięta treść Dodana treść
m drobne redakcyjne, drobne techniczne Znacznik: Wycofane |
Anulowanie wersji 63598152 autorstwa Benedykt Gierosławski (dyskusja) nie należy mnożyć przykładów, Wikipedia nie służy do tego Znacznik: Anulowanie edycji |
||
Linia 1:
'''Mechanizm refleksji''' – pojęcie z dziedziny informatyki oznaczające proces, dzięki któremu program komputerowy może być modyfikowany w trakcie działania w sposób zależny od własnego kodu oraz od zachowania w trakcie wykonania. [[Paradygmat programowania]] ściśle związany z mechanizmem refleksji to ''programowanie refleksyjne''.
Refleksja pozwala w łatwy sposób zarządzać kodem tak, jakby był danymi. Używa się jej najczęściej do zmieniania standardowego zachowania już zdefiniowanych metod lub funkcji, a także do tworzenia własnych konstrukcji semantycznych modyfikujących język. Z drugiej strony kod wykorzystujący '''refleksję''' jest mniej czytelny
Mechanizm ten jest częściej spotykany w [[język wysokiego poziomu|językach wysokiego poziomu]], zwykle opartych na [[maszyna wirtualna|maszynie wirtualnej
== Przykłady ==
=== C# ===
Poniższy przykład demonstruje użycie refleksji w języku [[C Sharp]] używając pakietu [http://msdn.microsoft.com/pl-pl/library/system.reflection%28v=vs.110%29.aspx System.Reflection]
<syntaxhighlight lang="objc">
//bez refleksji
Linia 20 ⟶ 18:
MethodInfo inf = type.GetMethod("hello");
inf.Invoke(foo); // jako drugi parametr metoda Invoke przyjmuje tablicę Object[] są to parametry metody hello.
</syntaxhighlight>
===
Poniższy przykład demonstruje użycie
<syntaxhighlight lang="
// bez refleksji▼
Foo *foo = [[Foo alloc] init];▼
[foo hello];▼
[foo release];▼
// z refleksją▼
id foo = [[NSClassFromString(@"Foo") alloc] init];▼
SEL selector = NSSelectorFromString(@"hello");▼
[foo performSelector:selector];▼
[foo release];▼
</syntaxhighlight>
=== Java ===
Poniższy przykład w [[Java|języku Java]] wykorzystuje pakiet [http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/package-summary.html java.lang.reflect].
Linia 97 ⟶ 78:
}
}
▲// bez refleksji
▲Foo *foo = [[Foo alloc] init];
▲[foo hello];
▲[foo release];
▲// z refleksją
▲id foo = [[NSClassFromString(@"Foo") alloc] init];
▲SEL selector = NSSelectorFromString(@"hello");
▲[foo performSelector:selector];
▲[foo release];
</syntaxhighlight>
|