Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

Для получения сведений о сборке сначала необходимо создать объект класса Assembly. В классе Assembly открытый конструктор не определяется. Вместо этого объект класса Assembly получается в результате вызова одного из его методов. Так, для загрузки сборки по заданному ее имени служит метод LoadFrom . Ниже приведена его соответствующая форма:

static Assembly LoadFrom(string файл_сборки)

где файл_

сборки– обозначает конкретное имя файла сборки.

Как только будет получен объект класса Assembly, появится возможность обнаружить определенные в нем типы данных, вызвав для него метод Get Types в приведенной ниже общей форме.

Туре [ ] GetTypesO

Этот метод возвращает массив типов, содержащихся в сборке.

Для того чтобы продемонстрировать порядок обнаружения типов в сборке, потребуются два исходных файла. Первый файл будет содержать ряд классов, обнаруживаемых в коде из второго файла. Создадим сначала файл MyClasses . cs, содержащий следующий код.

// Файл, содержащий три класса и носящий имя MyClasses.cs.

using System;

class MyClass { int x; int y;

public MyClass(int i) {

Console.WriteLine("Конструирование класса MyClass(int). "); x = у = i ;

Show ;

}

public MyClass(int i, int j) {

Console.WriteLine("Конструирование класса MyClass(int, int). ") ; x = i;

у = j;

Show;

}

public int Sum { return x+y;

}

public bool IsBetween(int i) {

if ( (x < i) && (i < y)) return true;

else return false; \

}

public void Set(int a, int b) {

Console.Write("В методе Set(int, int). "); x = a;

У = b;

Show;

}

// Перегрузить.метод Set.

public void Set(double a, double b) {

Console.Write("В методе Set(double, double). "); x = (int) a; у = (int) b;

Show ;

}

public void Show {

Console.WriteLine ("Значение x: {0}, значение у: {1}", x, у);

}

}

class AnotherClass { string msg;

public AnotherClass(string str) { msg = str;

}

public void Show {

Console.WriteLine(msg);

class Demo {

static void Main {

Console.WriteLine("Это

заполнитель.");

}

}

Этот файл содержит класс MyClass, неоднократно использовавшийся в предыдущих примерах. Кроме того, в файл добавлены второй класс AnotherClass и третий класс Demo. Следовательно, сборка, полученная из исходного кода, находящегося в этом исходном файле, будет содержать три класса. Затем этот файл компилируется, и из него формируется исполняемый файл MyClasses . ехе. Именно эта сборка и будет опрашиваться программно.

Ниже приведена программа, в которой будут извлекаться сведения о файле сборки MyClasses . ехе. Ее исходный текст составляет содержимое второго файла.

/* Обнаружить сборку, определить типы и создать объект с помощью рефлексии. */

using System;

using System.Reflection;

class ReflectAssemblyDemo { static void Main { int val;

// Загрузить сборку MyClasses.exe.

Assembly asm = Assembly.LoadFrom("MyClasses.exe");

// Обнаружить типы, содержащиеся в сборке MyClasses.exe.

Туре[] alltypes = asm.GetTypes; foreach(Type temp in alltypes)

Console.WriteLine("Найдено: " + temp.Name);

Console.WriteLine ;

// Использовать первый тип, в данном случае — класс MyClass.

Type t = alltypes[0]; // использовать первый найденный класс Console.WriteLine("Использовано: " + t.Name);

// Получить сведения о конструкторе.

Constructorlnfo[] ci = t.GetConstructors ;

Console.WriteLine("Доступные конструкторы: "); foreach(Constructorlnfo с in ci) {

// Вывести возвращаемый тип и имя.

Console.Write(" " + t.Name + "(");

// Вывести параметры.

Parameterlnfo[] pi = с.GetParameters; for(int i=0; i < pi.Length; i++) {

Console.Write(pi[i].ParameterType.Name + " " + pi[i].Name);

if(i+1 < pi.Length) Console.Write(", ");

}

Console.WriteLine (")");

}

Console.WriteLine ;

// Найти подходящий конструктор, int x;

for(x=0; x < ci.Length; x++) {

Parameterlnfo[] pi = ci[x].GetParameters ; if (pi.Length == 2) break;

Поделиться:
Популярные книги

Внешники такие разные

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники такие разные

Измена. Тайный наследник

Лаврова Алиса
1. Тайный наследник
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Тайный наследник

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Страж Кодекса. Книга IX

Романов Илья Николаевич
9. КО: Страж Кодекса
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Страж Кодекса. Книга IX

Завод 2: назад в СССР

Гуров Валерий Александрович
2. Завод
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Завод 2: назад в СССР

Страж Кодекса. Книга IV

Романов Илья Николаевич
4. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга IV

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Умеющая искать

Русакова Татьяна
1. Избранница эльты
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Умеющая искать

Отверженный IX: Большой проигрыш

Опсокополос Алексис
9. Отверженный
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Отверженный IX: Большой проигрыш

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Лучший из худших-2

Дашко Дмитрий Николаевич
2. Лучший из худших
Фантастика:
фэнтези
5.00
рейтинг книги
Лучший из худших-2

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель