text: Для каждого языка приведено по два примера: первый не использует рефлексию, а второй использует. // Без рефлексии new Foo().Hello(); // С рефлексией Type type = System.Type.GetType("Foo"); var foo = Activator.CreateInstance(type); foo.GetType().GetMethod("Hello").Invoke(foo, null); Также работает на JavaScript и ActionScript: // Без рефлексии new Foo().hello() // С рефлексией // assuming that Foo resides in this new this()() // or without assumption new (eval('Foo'))()() // Без рефлексии new Foo().hello(); // С рефлексией Class.forName("Foo") .getMethod("hello", null) .invoke(foo.newInstance(), null); Библиотека Qt расширяет возможности C++ с помощью метаязыка и обеспечивает поддержку рефлексии для ссылок на члены/методы класса и запрос имени объектов Qt с помощью класса QMetaObject, содержащего метаданные об объектах Qt. // Без рефлексии QObject *obj = new QPushButton; obj->metaObject()->className(); // "QPushButton" // С рефлексией QPushButton::staticMetaObject.className(); // "QPushButton" -- Без рефлексии Foo.hello() -- С рефлексией _G() // Без рефлексии Foo *foo = init]; ; // С рефлексией Class cls = NSClassFromString(@"Foo"); id foo = init]; SEL selector = NSSelectorFromString(@"hello"); ; # Без рефлексии my $foo = Foo->new(); $foo->hello(); # С рефлексией (используя синтаксис разыменовывания объектов) my $class = "Foo"; my $method = "hello"; my $object = $class->new(); $object->$method(); //Без рефлексии $oFoo = new Foo(); $oFoo->hello(); //С рефлексией (используя ReflectionClass, введен в PHP5) $oReflector = new ReflectionClass('Foo'); $oFoo = $oReflector->newInstance(); $oHello = $oReflector->getMethod('hello'); $oHello->invoke($oFoo); //С рефлексией (используя callback) $oFoo = new Foo(); call_user_func(array($oFoo,'hello')); //С рефлексией (используя синтаксис разыменовывания объектов) $class_name = "Foo"; $f = new $class_name(); $method = "hello"; $f->$method(); # Без рефлексии Foo().hello() # С рефлексией getattr(globals()(), 'hello')() # Без рефлексии Foo.new.hello # С рефлексией Object.const_get(:Foo).send(:new).send(:hello) "Без рефлексии" Foo new hello "С рефлексией" ((Smalltalk at: #Foo) perform: #new) perform: #hello Foo := Object clone do( hello := method( "Hello" println ) ) # Без рефлексии Foo hello # С рефлексией getSlot("Foo") getSlot("hello") call // Без рефлексии var foo:Foo = new Foo(); foo.hello(); // С рефлексией var cls:Object = getDefinitionByName("Foo"); var foo:Object = new cls(); foo(); // Без рефлексии var foo : TFoo; begin foo := TFoo.Create(); foo.Hello(); end; // С рефлексией var c : TRttiContext; t : TRttiInstanceType; foo : TValue; begin c := TRttiContext.Create; t := (c.FindType('TFoo') as TRttiInstanceType); foo := t.GetMethod('Create').Invoke(t.MetaclassType,); t.GetMethod('Hello').Invoke(foo,); c.Free; end. *Без рефлексии DATA: lo_foo TYPE REF TO foo.