мы можем создать экземпляр класса во время выполнения и вызвать все методы класса через код? - PullRequest
4 голосов
/ 02 мая 2011

В интервью Интервьюер спросил меня можем ли мы создать экземпляр класса во время выполнения и вызвать все методы класса через код? Пример кода для класса TestClass ниже

public class TestClass
{
    public int ID
    {
        get;
        set;
    }
    public string Name
    {
        get;
        set;
    }
    public float Salary
    {
        get;
        set;
    }
    public string Department
    {
        get;
        set;
    }
    public int Add(int a, int b)
    {
        return a + b;
    }
    public int Sub(int a, int b)
    {
        return a - b;
    }
}//end class

Теперь я хочу создать экземпляр этого класса во время выполнения и вызвать все его методы и свойства во время выполнения. Может ли кто-нибудь объяснить, как мне это заархивировать. 2. какая выгода / использование для вызова метода таким образом?

Ответы [ 2 ]

5 голосов
/ 02 мая 2011

Да, это возможно.

Для создания экземпляра вы должны использовать:

Type classType = Type.GetType("TestClass");
object instance = Activator.CreateInstance(classType);

И затем вызов Sub(23, 42) на instance выглядит следующим образом:

classType.InvokeMember("Sub", BindingFlags.InvokeMethod, null, instance, new object[] { 23, 42 });

Отражение используется (например), когда вы не знаете типы во время компиляции и хотите обнаружить их во время выполнения (например, во внешних библиотеках, плагинах и т. Д.).

3 голосов
/ 02 мая 2011

Я думаю, что он спрашивал об отражении.Существует масса информации по этой теме и здесь, и в Google.
По сути, причина, по которой вы хотели бы сделать это, заключается в том, что вы не знаете конкретный тип во время компиляции и вам нужно найти его динамическиво время выполнения.
Одним из примеров является простая система плагинов, где вам требуется плагин для реализации определенного интерфейса.Во время выполнения вы загружаете все сборки в назначенную папку и, используя отражение, ищете классы, реализующие интерфейс, а затем создаете экземпляр этого класса и вызываете методы для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...