2016-06-23 7 views
2

デリゲートは、関数を参照する参照型であることがわかります。スタックとrvariableにメモリが割り当てられ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); 
    } 
} 
} 

我々は関数(FUN)内のローカル変数はlvariable知っているように文字列が格納され、ヒープのメモリ位置への参照を含みます。今

彼ら(fun_delegateと応答が)かどうかをスタックまたはヒープ上に、メモリを割り当てる
  1. 我々は、デリゲートまたはデリゲートのインスタンスを定義し、?
  2. なぜそれを任意の関数に参照するためにデリゲートのインスタンスを作成する必要があるのですか?彼ら (fun_delegateと応答が)かどうかをスタック上または ヒープ上に、メモリを割り当てる
+0

この投稿をチェックしたいかもしれません。http://stackoverflow.com/questions/22431902/where-variables-of-a-function-is-store-on-stack-or-heap – Rahul

答えて

2

我々は、デリゲートまたはデリゲートのインスタンスを定義し、?

fun_delegateあなたの例では、クラスであり、メタデータに格納されています。 responseは、参照型のフィールドであり、前記型の他のすべてのフィールドとともにヒープに割り当てられます。

なぜそれを参照するためにデリゲートのインスタンスを作成する必要がありますか? どのような機能ですか?

データをストーリーするためにメモリ内の場所を割り当てるインスタンスを作成する必要があります。フィールド/変数にメモリを割り当てない限り、その値を格納する場所はありません。

関連する問題