2016-06-23 12 views
2

Wir wissen, dass Delegaten Referenztyp sind, der sich auf Funktion bezieht.Mechanismus der Speicherzuweisung zu Delegaten in C# .net

using System; 
namespace Testing_Delegates 

{ 

class Program 
{ 
    delegate void fun_delegate(); 
    fun_delegate response; 

    static void Main(string[] args) 
    { 
     Program p = new Program(); 

     p.fun();//Calling function directly 
     p.response += p.fun;//Setting reference to the function via delegate 
    } 

    public void fun() 
    { 
     int lvariable = 10000; 
     string rvariable = "Hello Developers!"; 
     Console.WriteLine(lvariable + " " + rvariable); 
    } 
} 
} 

Wie wir wissen lokale Variablen innerhalb Funktion (fun) sind lvariable die Speicher auf dem Stapel zugeordnet ist und rvariable an Speicherplatz Heap enthalten Referenz wo der String-Shop ist.

, Now

  1. Wenn wir delegieren oder Instanz von Delegierten zu definieren, wo sie (fun_delegate und response) Speicher zuzuordnen, ob auf dem Stapel oder Haufen auf?
  2. Warum muss eine Instanz von delegate erstellt werden, um sie auf eine Funktion zu verweisen?
+0

können Sie diesen Beitrag http://stackoverflow.com/questions/22431902/where-variables-of-a-function-is-store-on-stack-or-heap überprüfen möchten – Rahul

Antwort

2

Wenn wir delegieren oder Instanz von Delegierten zu definieren, wo sie (fun_delegate und response) Speicher zuzuordnen, ob auf dem Stapel oder Haufen auf ?

fun_delegate In Ihrem Beispiel ist eine Klasse und wird in Metadaten gespeichert. response ist ein Feld in einem Referenztyp und wird auf Heap zusammen mit allen anderen Feldern des genannten Typs zugeordnet.

Warum gibt es braucht eine Instanz von Delegierten zu schaffen, um es zu jede Funktion zu verweisen?

Wir müssen eine Instanz erstellen, um Speicherplatz im Speicher den Daten zuzuordnen. Wenn Sie keinen Speicher für ein Feld/eine Variable reservieren, können Sie deren Wert nicht speichern.