Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Отражение

Механизм отражения позволяет получать объекты (типа Type), которые описывают сборки, модули и типы. Отражение можно использовать для динамического создания экземпляра типа, привязки типа к существующему объекту, а также получения типа из существующего объекта и вызова его методов или доступа к его полям и свойствам. Если в коде используются атрибуты, отражение обеспечивает доступ к ним. Дополнительные сведения см. в разделе Атрибуты.

Вот простой пример отражения, в котором для получения типа переменной используется статический метод GetType, наследуемый всеми типами из основного класса Object.

-----

Результат получается следующим:

System.Int32

В этом примере отражение используется для получения полного имени загруженной сборки.

-----

Результат получается следующим:

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

Примечание.

Ключевые слова C# protected и internal не имеют никакого значения в промежуточном языке и не используются в интерфейсах API отражения. Соответствующими терминами в промежуточном языке являются Family и Assembly. Для идентификации метода internal с помощью отражения используется свойство IsAssembly. Для идентификации метода protected internal используется свойство IsFamilyOrAssembly.

Общие сведения об отражении

Отражение удобно использовать в следующих ситуациях.

  • При необходимости доступа к атрибутам в метаданных программы.

  • Для проверки и создания экземпляров типов в сборке.

  • Для создания новых типов во время выполнения. Используйте классы в System.Reflection.Emit.

  • Для выполнения позднего связывания, которое обеспечивает доступ к методам в типах, созданных во время выполнения.

C# DLLs

You can use Visual C# to create DLLs that are callable by other managed applications and by unmanaged code

How to: Create and Use C# DLLs

A dynamic linking library (DLL) is linked to your program at run time. To demonstrate building and using a DLL, consider the following scenario:

  • MathLibrary.DLL: The library file that contains the methods to be called at run time. In this example, the DLL contains two methods, Add and Multiply.

  • Add.cs: The source file that contains the method Add(long i, long j). It returns the sum of its parameters. The class AddClass that contains the method Add is a member of the namespace UtilityMethods.

  • Mult.cs: The source code that contains the method Multiply(long x, long y). It returns the product of its parameters. The class MultiplyClass that contains the method Multiply is also a member of the namespace UtilityMethods.

  • TestCode.cs: The file that contains the Main method. It uses the methods in the DLL file to calculate the sum and the product of the run-time arguments.

Example

// File: Add.cs

namespace UtilityMethods

{

public class AddClass

{

public static long Add(long i, long j)

{

return (i + j);

}

}

}