Книга программиста/Примеры рефлексии на PascalABC.Net
(перенаправлено с «Примеры рефлексии на PascalABC.Net»)
Все программы, код которых выложен здесь, являются работоспособными. На момент написания программ использовалась среда PascalABC.Net 3.0.
Пример 1
править{Переведено с C#.}
uses System;
uses System.Reflection;
type
User = class
private
fName: string;
fAge: integer;
public
property Name: string read fName write fName; // Имя
property Age: integer read fAge write fAge; // Возраст
constructor ();
begin
end;
procedure Display() := Console.WriteLine('Имя: {0} Возраст: {1}', Name, Age); // Выполняет вывод строкового представление объекта.
function Payment(hours, perhour: integer) := hours * perhour; // Вычисляет зарплату.
end;
begin
var MyType := typeof(User);
var MyType2 := &Type.GetType('Рефлексия - пример 1.User', false, true);
Console.WriteLine(MyType.ToString());
Console.WriteLine(MyType2.ToString());
Console.ReadLine();
end.
Пример 2
править{Переведено с C#.}
uses System;
uses System.Reflection;
type
User = class
private
fName: string;
fAge: integer;
public
property Name: string read fName write fName; // Имя
property Age: integer read fAge write fAge; // Возраст
constructor ();
begin
end;
procedure Display() := Console.WriteLine('Имя: {0} Возраст: {1}', Name, Age); // Выполняет вывод строкового представление объекта.
function Payment(hours, perhour: integer) := hours * perhour; // Вычисляет зарплату.
end;
begin
var man := new User();
man.Name := 'Tom';
man.Age := 30;
var myType := man.GetType();
foreach var member in myType.GetMembers() do
Console.WriteLine('{0} {1} {2}', member.DeclaringType.Name, member.MemberType, member.Name);
Console.ReadLine();
end.
Пример 3
править{Переведено с C#.}
uses System.Reflection;
type
TUser = class
private
_Name: string;
_Age: integer;
public
property Name: string read _Name write _Name;
property Age: integer read _Age write _Age;
constructor ();begin end;
procedure Display() := WritelnFormat('Имя: {0} Возраст: {1}', Name, Age);
function Payment(hours, perhour: integer) := hours * perhour;
end;
begin
{Переведено с C#.}
uses System;
uses System.Reflection;
type
User = class
private
fName: string;
fAge: integer;
public
property Name: string read fName write fName; // Имя
property Age: integer read fAge write fAge; // Возраст
constructor ();
begin
end;
procedure Display() := Console.WriteLine('Имя: {0} Возраст: {1}', Name, Age); // Выполняет вывод строкового представление объекта.
function Payment(hours, perhour: integer) := hours * perhour; // Вычисляет зарплату.
end;
begin
var man := new User();
man.Name := 'Tom';
man.Age := 30;
var myType := man.GetType();
foreach var member in myType.GetMethods() do
begin
var modifier := '';
if member.IsStatic then
modifier += 'static '
else if member.IsVirtual then
modifier += 'virtual';
if string.IsNullOrEmpty(modifier) then
Console.Write('{0} {1}(', member.ReturnType.Name, member.Name)
else
Console.Write('{0} {1} {2}(', modifier, member.ReturnType.Name, member.Name);
var parameters := member.GetParameters();
for var i := 0 to Length(parameters) - 1 do
begin
Console.Write('{0} {1}', parameters[i].ParameterType.Name, parameters[i].Name);
if i + 1 < parameters.Length then
Console.Write(', ');
end;
Console.WriteLine(')');
end;
Console.ReadLine();
end.
Пример 4
править{Переведено с C#.}
uses System;
uses System.Reflection;
type
User = class
private
fName: string;
fAge: integer;
public
property Name: string read fName write fName; // Имя
property Age: integer read fAge write fAge; // Возраст
constructor (name: string; age: integer);
begin
fName := name;
fAge := age;
end;
procedure Display() := Console.WriteLine('Имя: {0} Возраст: {1}', Name, Age); // Выполняет вывод строкового представление объекта.
function Payment(hours, perhour: integer) := hours * perhour; // Вычисляет зарплату.
end;
begin
var man := new User('Tom', 30);
var myType := man.GetType();
foreach var m in myType.GetConstructors() do
begin
Console.Write(m.Name + '(');
var parameters := m.GetParameters();
for var i := 0 to Length(parameters) - 1 do
begin
Console.Write('{0} {1}', parameters[i].ParameterType.Name, parameters[i].Name);
if i + 1 < parameters.Length then
Console.Write(', ');
end;
Console.WriteLine(')');
end;
Console.ReadLine();
end.
Пример 5
править{Переведено с C#.}
uses System.Reflection;
type
TUser = class
private
_Name: string;
_Age: integer;
public
property Name: string read _Name write _Name;
property Age: integer read _Age write _Age;
constructor(n: string; a: integer);
begin
Name := n;
Age := a;
end;
procedure Display() := WritelnFormat('Имя: {0} Возраст: {1}', Name, Age);
function Payment(hours, perhour: integer) := hours * perhour;
end;
begin
var Man := new TUser('Tom', 30);
var MyType := Man.GetType();
Writeln('Fields:');
foreach var f in MyType.GetFields() do
WritelnFormat('{0} {1}', f.FieldType, f.Name);
Writeln('Properties:');
foreach var p in MyType.GetProperties() do
WritelnFormat('{0} {1}', p.PropertyType, p.Name);
Readln();
end.