2009-11-17 2 views
-3

Является ли это способом C# для создания экземпляра переменной в вызове метода без использования оператора switch.Как создать экземпляр переменной для вызова метода

+1

Я не уверен, что вы просите. Вы имеете в виду, как полиморфизм? –

+0

Вы запрашиваете функцию, похожую на eval, где вы можете вызвать функцию по ее имени, когда она содержится в строковой переменной? –

+2

-1 для того, чтобы не объяснять или давать подробности. Я ненавижу эти типы вопросов! – JonH

ответ

4

Похоже, что вы хотите взять строку и использовать эту строку для вызова метода на объекте, это можно сделать с помощью reflection без необходимости в заявлении switch.

string methodName = "ToString"; 
var method = typeof(TypeYourMethodExistsOn).GetMethod(methodName); 
method.Invoke(objectInstance, null); 
+0

Aah Bob, Это был быстрый ответ, и я думаю, что это именно то, что я ищу. –

+0

Имейте в виду, что оператор switch скорее всего быстрее, чем при использовании отражения. –

+0

Ну, каждый из методов для вызова извлекает конкретное значение из XML-сообщения. Согласно схеме, существует около 80 нечетных уникальных значений, которые вы можете извлечь, что сделало бы для большого оператора switch, но это все равно будет быстрее, чем отражение. –

1

Я тоже не слишком ясен. Если вы не хотите использовать отражение (иногда тяжелое), для динамического вызова методов с использованием переменной вы можете использовать что-то вроде коллекции, содержащей делегатов, в качестве значений и вызывать их.

Я использую чрезвычайно похожий словарь-объект для динамического вызова известного метода на основе строковых вводов.

код псевдо:

delegate void Del(int i, double j); 

class MathClass 
{ 
    static void Main() 
    { 
     MathClass m = new MathClass(); 

     // Delegate instantiation using "MultiplyNumbers" 
     Del d = m.MultiplyNumbers; 
     Hashtable ht = new Hashtable(); 
     ht.Add("mult", d); 

     // Invoke the delegate object. 
     System.Console.WriteLine("Invoking the delegate using 'MultiplyNumbers':"); 
     for (int i = 1; i <= 5; i++) 
     { 
      ((del) ht("mult"))(i, 2); 
     } 
    } 

    // Declare the associated method. 
    void MultiplyNumbers(int m, double n) 
    { 
     System.Console.Write(m * n + " "); 
    } 
} 
Смежные вопросы