webForumDet fria alternativet

Anropa metoder dynamisk

.NET

3 svar · 399 visningar · startad av Herman

Medlem sedan maj 2001431 inlägg
Frågan#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()

Medlem sedan dec. 2000399 inlägg
#2

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

Medlem sedan maj 2001431 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

Medlem sedan maj 2001431 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);
251 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)