2009-10-29 6 views
1

Comme vous le savez, quand nous avons ce code en Javascript:Comment obtenir chaîne de fonction assignée à déléguer

function getName() 
{ 
    var getName = "Hello"; 
    return getName; 
} 

var NameString = getName; 

alert(NameString.toString()); 

retournera;

function getName() 
{ 
    var getName = "Hello"; 
    return getName; 
} 

comme chaîne plutôt que le résultat de l'appel de fonction.

Comment faire la même chose en C#?

Par exemple comment obtenir les codes de fonction affectés à un Delegate?

Merci d'avance.

(P.s: Je pense qu'il semble que je peux avoir besoin d'utiliser System.Reflection)

Le moi intérieur pense que quelque chose comme ceci:

public string delegate PointThat(); 

public string TheMethod() 
{ 
    string getName = "Hello World"; 
    return getName; 
} 

// some function signature 
{ 
    PointThat t = TheMethod; 
    t.ToString() // returns the function string rather than invocation result 
} 

Répondre

1

Javascript est interprété, C# est compilé. Dans les langages interprétés, vous déployez la source pendant le déploiement du fichier binaire compilé pour les langages compilés. Il n'y a plus de source. Vous pouvez analyser la méthode via la réplication et reconstruire la source, mais ce n'est pas la même chose.

Edit:

Si vous compilez vos fichiers C# vous obtenez un ou dll exe ou autre. C'est un code exécutable binaire et pas de code source. Javascript d'autre part est toujours juste du texte, le code source. Si vous incorporez JS dans une page Web, le code peut toujours être lu. Essayez de lire un exe ou un DLL avec un éditeur de texte. Tu ne peux pas faire ça. Son binaire, le code source est parti. C'est pourquoi vous ne pouvez pas imprimer la source de votre méthode.

http://en.wikipedia.org/wiki/Interpreter_%28computing%29
http://en.wikipedia.org/wiki/Compiler

également un délégué est essentiellement un pointeur de fonction (typesafe). Cela signifie qu'il pointe vers la fonction et ne la contient pas.

Si vous voulez vraiment comprendre le problème, vous devez comprendre la différence entre un compilateur et un interpréteur (voir les deux liens ci-dessus).

+0

Salut, merci pour la réponse, mais il semble un peu difficile à comprendre. Pourriez-vous s'il vous plaît utiliser une langue plus décente. – Tarik

+0

Comment fonctionne .NET Reflector? –

+0

Merci, maintenant c'est logique. – Tarik

1

En bref, vous ne pouvez pas (vraiment). C'est parce que ce que vous voyez dans javascript est en fait un objet, pas seulement une fonction, alors que le code C# donne une fonction (compilée) qui peut être appelée.

Certaines des options que vous avez:

  • Obtenez les métadonnées de la fonction par réflexion; cela n'expose aucune des fonctionnalités qui sont à l'intérieur de la fonction. Allez un peu plus loin et décompilez la fonction (comme le fait Reflector), mais cela ne donne pas la source d'origine mais un repro qui devrait faire la même chose. Conservez la source et compilez-la "à la demande", mais cela nécessite aussi une certaine interaction de votre part.

Questions connexes