c#.net

时间:2016-06-23 01:28:23

标签: c# .net memory-management reference delegates

我们知道委托是引用函数的引用类型。

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,它是在堆栈上分配的内存,而rvariable包含对存储字符串的堆的内存位置的引用。

现在,

  
      
  1. 当我们定义委托的委托或实例时,他们(fun_delegate和response)在哪里分配内存,无论是在堆栈上还是在堆上?
  2.   
  3. 为什么需要创建委托实例以将其引用到任何函数?
  4.   

1 个答案:

答案 0 :(得分:2)

  

当我们定义委托的委托或实例时,它们在哪里   (fun_delegate和response)分配内存,无论是在堆栈上还是在堆栈上   堆?

示例中的

fun_delegate是一个类,存储在元数据中。 response是引用类型中的一个字段,并在堆上与所述类型的所有其他字段一起分配。

  

为什么需要创建委托实例来引用它   任何功能?

我们需要创建一个实例来在内存中分配位置来记录数据。除非为字段/变量分配内存,否则无处存储它们的值。