2009-03-17 9 views
1

public static void finden Refer (ref int a, ref int b)
in diesem wie finde ich, dass diese Variablen Referenzgröße ist programmatisch ..wie i ihre Art finden Siewie einen Referenz-Datentyp

+0

Fragen Sie, ob es eine Möglichkeit gibt zu bestimmen, ob a und b durch Verweis in die Methode übergeben werden, oder ob a und b Referenztypen sind (im Gegensatz zu Werttypen)? –

+0

ja das ist mein Zweifel – Arunachalam

Antwort

3

Sie meinen, Sie möchten über die Reflexion wissen, dass die Parameter der Methode by-ref sind?

Sie verwenden MethodBase.GetParameters die Parameter für die Methode zu bekommen, und dann ParameterInfo.ParameterType den Typ des Parameters zu finden und Type.IsByRef zu überprüfen, ob es als Referenz übergeben wird.

Hier ist ein kurzes Beispiel:

using System; 
using System.Reflection; 

public class Test 
{ 
    public static void Refer(ref int a,ref int b) 
    { 
    } 

    static void Main() 
    { 
     MethodInfo method = typeof(Test).GetMethod("Refer"); 
     ParameterInfo[] parameters = method.GetParameters(); 
     foreach (ParameterInfo parameter in parameters) 
     { 
      Console.WriteLine("{0} is ref? {1}", 
           parameter.Name, 
           parameter.ParameterType.IsByRef); 
     } 
    } 
} 

Sie können dies nicht in einer „starken“ Art und Weise für eine Variable a.GetType() oder typeof(a) usw. GetType() findet die Art des von aWert verwenden, die ist nur ein int.

+0

Awe ... einige !! :-) – Cerebrus

+0

siehe auch diese Frage beantwortet von Jon Skeet http://stackoverflow.com/questions/738277/net-reflection-how-to-get-real-type-from-out-parameterinfo auf, wie 'de-referenzieren 'ParameterType, um den Typ zu erhalten, den Sie mit Type.IsAssignableFrom verwenden können – JJS

1

Seit C# ist stark typisiert, Sie können alle int Methoden sicher verwenden, da a und bints sein müssen. Wenn Sie jedoch zur Laufzeit Type benötigen, verwenden Sie den Operator typeof.

+0

Funktioniert typeof auf Variablen? Ich dachte, es funktioniere nur bei Typnamen. Ich denke für Variablen müssen Sie a.GetType() –

0

Sie haben die Eigenschaft IsByRef auf dem ParameterInfo.ParameterType.