» » » Герберт Шилдт - C# 4.0: полное руководство


Авторские права

Герберт Шилдт - C# 4.0: полное руководство

Здесь можно скачать бесплатно "Герберт Шилдт - C# 4.0: полное руководство" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование, издательство ООО "И.Д. Вильямс", год 2011. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Герберт Шилдт - C# 4.0: полное руководство
Рейтинг:
Название:
C# 4.0: полное руководство
Издательство:
ООО "И.Д. Вильямс"
Год:
2011
ISBN:
978-5-8459-1684-6
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "C# 4.0: полное руководство"

Описание и краткое содержание "C# 4.0: полное руководство" читать бесплатно онлайн.



В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.


Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию






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

  }

}


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.

    Type[] alltypes = asm.GetTypes();

    foreach (Type temp in alltypes)

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

    Console.WriteLine();

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

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

    Console.WriteLine("Использовано: " + t.Name);

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

    ConstructorInfo[] ci = t.GetConstructors();

    Console.WriteLine("Доступные конструкторы: ");

    foreach (ConstructorInfo с in ci) {

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

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

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

      ParameterInfo[] 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++) {

      ParameterInfo[] pi = ci[x].GetParameters();

      if (pi.Length == 2) break;

    }

    if (x == ci.Length) {

      Console.WriteLine("Подходящий конструктор не найден.");

      return;

    }

    else

      Console.WriteLine("Найден конструктор с двумя параметрами.\n");

    // Сконструировать объект,

    object[] consargs = new object[2];

    consargs[0] = 10;

    consargs[1] = 20;

    object reflectOb = ci[x].Invoke(consargs);

    Console.WriteLine("Вызов методов для объекта reflectOb."); Console.WriteLine();

    MethodInfo[] mi = t.GetMethods();

    // Вызвать каждый метод,

    foreach (MethodInfo m in mi) {

      //• Получить параметры.

      ParameterInfo[] pi = m.GetParameters();

      if (m.Name.CompareTo("Set") == 0 &&

            pi[0].ParameterType == typeof(int)) {

        // Это метод Set(int, int).

        object[] args = new object[2];

        args[0] = 9;

        args[1] = 18;

        m.Invoke(reflectOb, args);

      }

      else if (m.Name.CompareTo("Set") == 0 &&

            pi[0].ParameterType == typeof(double)) {

        // Это метод Set(double, double).

        object[] args = new object[2];

        args[0] = 1.12;

        args[1] = 23.4;

        m.Invoke(reflectOb, args);

      }

      else if (m.Name.CompareTo("Sum") == 0) {

        val = (int)m.Invoke(reflectOb, null);

        Console.WriteLine("Сумма равна " + val);

      }

      else if (m.Name.CompareTo("IsBetween") == 0) {

        object[] args = new object[1];

        args[0] = 14;

        if ((bool)m.Invoke(reflectOb, args))

          Console.WriteLine("Значение 14 находится между x и у");

      }

      else if ( m.Name.CompareTo("Show") == 0)    {

        m.Invoke(reflectOb, null);

      }

    }

  }

}


При выполнении этой программы получается следующий результат.

Найдено: MyClass

Найдено: AnotherClass

Найдено: Demo


Использовано: MyClass


Доступные конструкторы:

  MyClass(Int32 i)

  MyClass(Int32 i, Int32 j)


Найден конструктор с двумя параметрами.


Конструирование класса MyClass(int, int)

Значение х: 10, значение у: 20


Вызов методов для объекта reflectOb


Сумма равна 30

Значение 14 находится между х и у

В методе Set (int, int) . Значение х: 9, значение у: 18

В методе Set(double, double). Значение х: 1, значение у: 23

Значение х: 1, значение у: 2 3


Как следует из результата выполнения приведенной выше программы, обнаружены все три класса, содержащиеся в файле сборки МуСlasses.ехе. Первым среди них обнаружен класс MyClass, который затем был использован для получения экземпляра объекта и вызова соответствующих методов.

Отдельные типы обнаруживаются в сборке MyClasses.ехе с помощью приведенной ниже последовательности кода, находящегося в самом начале методачМаin().


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

Assembly asm = Assembly.LoadFrom("MyClasses.ехе") ;


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

Туре[] alltypes = asm.GetTypes();


foreach(Type temp in alltypes)

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


Этой последовательностью кода можно пользоваться всякий раз, когда требуется динамически загружать и опрашивать сборку.

Но сборка совсем не обязательно должна быть исполняемым файлом с расширением .ехе. Сборки могут быть также в файлах динамически компонуемых библиотек (DLL) с расширением .dll. Так, если скомпилировать исходный файл MyClasses.cs в следующей командной строке:


csc /t:library MyClasses.es


то в итоге получится файл MyClasses.dll. Преимущество размещения кода в библиотеке DLL заключается, в частности, в том, что в этом случае метод Main() в исходном коде не нужен, тогда как всем исполняемым файлам требуется определенная точка входа, с которой должно начинаться выполнение программы. Именно поэтому класс Demo содержит метод Main() в качестве такой точки входа. А для библиотеки DLL метод Main() не требуется. Если же класс MyClass нужно превратить в библиотеку DLL, то в вызов метода LoadFrom() придется внести следующее изменение.


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


Полностью автоматизированное обнаружение типов

Прежде чем завершить рассмотрение рефлексии, обратимся к еще одному поучительному примеру. Несмотря на то что в программе из предыдущего примера класс MyClass был полноценно использован без явного указания на его имя в программе, этот пример все же опирается на предварительную осведомленность о содержимом класса MyClass. Так, в программе были заранее известны имена методов Set и Sum из этого класса. Но с помощью рефлексии можно воспользоваться типом данных, ничего не зная о нем заранее. С этой целью придется извлечь все сведения, необходимые для конструирования объекта и формирования вызовов соответствующих методов. Такой подход может оказаться пригодным, например, при создании инструментального средства визуального проектирования, поскольку он позволяет использовать типы данных, имеющиеся в системе.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "C# 4.0: полное руководство"

Книги похожие на "C# 4.0: полное руководство" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Герберт Шилдт

Герберт Шилдт - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Герберт Шилдт - C# 4.0: полное руководство"

Отзывы читателей о книге "C# 4.0: полное руководство", комментарии и мнения людей о произведении.

  1. BOT20.02.2021, 13:02
    сКОРО КУПЛЮ
А что Вы думаете о книге? Оставьте Ваш отзыв.