webForumDet fria alternativet

Anropa metoder dynamisk

3 svar · 397 visningar · startad av Herman

HermanMedlem sedan maj 2001427 inlägg
#1

hej jag undrar om man kan kalla på metoder dynamsik utan att använda en t.ex. switch-sats genom innehållet i en variabel.

string strCall = "metod1()";

alltså
anropa metoden som finns i strCall, i detta fall metod1()

juventus1Medlem sedan dec. 2000401 inlägg
#2

Kolla på reflections: http://www.dotnetbips.com/displayarticle.aspx?id=35

HermanMedlem sedan maj 2001427 inlägg
#3

Tack, jag har tittat på det en smula men det verkar inte ge mig det jag vill - iaf inte enkelt. I php går det fint att göra just det jag vill.

Se nedan

<?php
function foo() {
   echo "In foo()<br />\n";
}

function bar($arg = '')
{
   echo "In bar(); argument was '$arg'.<br />\n";
}

// This is a wrapper function around echo
function echoit($string)
{
   echo $string;
}

$func = 'foo';
$func();        // This calls foo()

$func = 'bar';
$func('test');  // This calls bar()

$func = 'echoit';
$func('test');  // This calls echoit()
?>

http://www.php.net/manual/sv/functions.variable-functions.php

HermanMedlem sedan maj 2001427 inlägg
#4

Fick till det, men det är inte lika smidigt som i php. Men det är inte direkt oväntat med tanke på språk. :)

string strKlass = "Klusse";
string strMetod = "Melon";

Type t = typeof(strKlass);
Object obj = t.InvokeMember(null, BindingFlags.DeclaredOnly |
 BindingFlags.Public | BindingFlags.NonPublic | 
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
string s = (string) t.InvokeMember(strMetod, BindingFlags.DeclaredOnly |
 BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance |
 BindingFlags.InvokeMethod, null, obj, null);
Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb