Добавить в цитаты Настройки чтения

Страница 261 из 502

<b>    if ((x &lt; i) &amp;&amp; (i &lt; y)) return true;</b>

<b>    else return false;</b>

<b>  }</b>

<b>  public void Set(int a, int b) {</b>

<b>    Console.Write(&quot;В методе Set(int, int). &quot;);</b>

<b>    x = a;</b>

<b>    y = b;</b>

<b>    Show();</b>

<b>  }</b>

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

<b>  public void Set(double a, double b) {</b>

<b>    Console.Write(&quot;В методе Set(double, double). &quot;);</b>

<b>    x = (int)a;</b>

<b>    y = (int)b;</b>

<b>    Show();</b>

<b>  }</b>

<b>  public void Show() {</b>

<b>    Console.WriteLine(&quot;Значение x: {0}, значение у: {1}&quot;, x, y);</b>

<b>  }</b>

<b>}</b>

<b>class AnotherClass {</b>

<b>  string msg;</b>

<b>  public AnotherClass(string str) {</b>

<b>    msg = str;</b>

<b>  }</b>

<b>  public void Show() {</b>

<b>    Console.WriteLine(msg);</b>

<b>  }</b>

<b>}</b>

<b>class Demo {</b>

<b>  static void Main() {</b>

<b>    Console.WriteLine(&quot;Это заполнитель.&quot;);</b>

<b>  }</b>

<b>}</b>

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

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

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

<b>using System;</b>

<b>using System.Reflection;</b>

<b>class ReflectAssemblyDemo {</b>

<b>  static void Main() {</b>

<b>    int val;</b>

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

<b>    Assembly asm = Assembly.LoadFrom(&quot;MyClasses.exe&quot;);</b>

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

<b>    Type[] alltypes = asm.GetTypes();</b>

<b>    foreach (Type temp in alltypes)</b>

<b>      Console.WriteLine(&quot;Найдено: &quot; + temp.Name);</b>

<b>    Console.WriteLine();</b>

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

<b>    Type t = alltypes[0]; // использовать первый найденный класс</b>

<b>    Console.WriteLine(&quot;Использовано: &quot; + t.Name);</b>

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

<b>    ConstructorInfo[] ci = t.GetConstructors();</b>

<b>    Console.WriteLine(&quot;Доступные конструкторы: &quot;);</b>

<b>    foreach (ConstructorInfo с in ci) {</b>

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

<b>      Console.Write(&quot; &quot; + t.Name + &quot;(&quot;);</b>

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

<b>      ParameterInfo[] pi = с.GetParameters();</b>

<b>      for (int i = 0; i &lt; pi.Length; i++) {</b>

<b>        Console.Write(pi[i].ParameterType.Name + &quot; &quot; + pi[i].Name);</b>

<b>        if (i + 1 &lt; pi.Length) Console.Write(&quot;, &quot;);</b>

<b>      }</b>

<b>      Console.WriteLine(&quot;)&quot;);</b>

<b>    }</b>

<b>    Console.WriteLine();</b>

<b>    // Найти подходящий конструктор,</b>

<b>    int x;</b>

<b>    for (x = 0; x &lt; ci.Length; x++) {</b>

<b>      ParameterInfo[] pi = ci[x].GetParameters();</b>

<b>      if (pi.Length == 2) break;</b>

<b>    }</b>