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

Тут можно читать онлайн Герберт Шилдт - C# 4.0: полное руководство - бесплатно ознакомительный отрывок. Жанр: comp-programming, издательство ООО И.Д. Вильямс, год 2011. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    C# 4.0: полное руководство
  • Автор:
  • Жанр:
  • Издательство:
    ООО И.Д. Вильямс
  • Год:
    2011
  • Город:
    Москва -- Киев
  • ISBN:
    978-5-8459-1684-6
  • Рейтинг:
    3.93/5. Голосов: 141
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

C# 4.0: полное руководство - описание и краткое содержание, автор Герберт Шилдт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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


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

C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок

C# 4.0: полное руководство - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Герберт Шилдт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

class MyClass {

int x;

int y;

public MyClass(int i) {

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

x = y = i;

}

public MyClass(int i, int j) {

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

x = i;

y = 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;

y = b;

Show();

}

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

public void Set(double a, double b) {

Console.Write("В методе(double, double). ");

x = (int)a;

y = (int)b;

Show();

}

public void Show() {

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

}

}

class InvokeConsDemo {

static void Main() {

Type t = typeof(MyClass);

int val;

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

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("\nВызов методов для объекта 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(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, значение у: 23

А теперь рассмотрим порядок применения рефлексии для конструирования объекта класса MyClass. Сначала получается перечень открытых конструкторов в следующей строке кода.

ConstructorInfo[] ci = t.GetConstructors();

Затем для наглядности примера выводятся полученные конструкторы. После этого осуществляется поиск по списку конструктора, принимающего два аргумента, как показано в приведенном ниже фрагменте кода.

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

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

if(pi.Length == 2) break;

}

Если такой конструктор найден, как в данном примере, то в следующем фрагменте кода получается экземпляр объекта заданного типа.

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

object[] consargs = new object[2];

consargs[0] = 10;

consargs[1] = 20;

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

После вызова метода Invoke()переменная экземпляра reflectObбудет ссылаться на объект типа MyClass. А далее в программе выполняются соответствующие методы для экземпляра этого объекта.

Следует, однако, иметь в виду, что ради простоты в данном примере предполагается наличие лишь одного конструктора с двумя аргументами типа int. Очевидно, что в реальном коде придется дополнительно проверять соответствие типов каждого параметра и аргумента.

Получение типов данных из сборок

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Герберт Шилдт читать все книги автора по порядку

Герберт Шилдт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




C# 4.0: полное руководство отзывы


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


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

Напишите свой комментарий
x