C#中的范围,当有函数调用时会发生什么?范围丢失了吗?

时间:2010-10-20 06:41:18

标签: c# scope

我有一个对象,即“服务器”,当程序控制超出范围时,它就会失去它。

因此,对于任何此类对象和对象的内存,当从作用域内调用函数时,对象是否会丢失?

void main void
{
     if this and that
     { //scope
         do this
         call_func();
     }
 }//main ends


void call_func()
{
    working
    "utilise objects created in parent."
    return;
}

call_func将无法查看父函数创建的内容?是吗?还是不?

2 个答案:

答案 0 :(得分:1)

作为一般规则,范围在大括号之间。所以call_func中的任何东西都有自己的作用域,与父函数完全分开。

当控制返回到父函数时,调用函数之前在范围内的对象仍然在括号内的任何范围内。

子方法只能访问父中的对象。在父方法中定义的对象仅在将它们(作为参数)专门传递给子项时才可用。

class testClass
{
    private int classLevelInt;

    private void Main()
    {
        int methodLevelInt;

        if (someTest)
        {
             int bracketLevelInt;

             // classLevelInt, methodLevelInt and bracketLevelInt all in scope
             ChildMethod();
             // classLevelInt, methodLevelInt and bracketLevelInt all in scope
        }

        // only classLevelInt and methodLevelInt are still in scope
    }

    private void ChildMethod()
    {
        // This method can see classLevelInt only
        // If access to other ints is required they must be passed to the method
    }
}

答案 1 :(得分:1)

  

call_func将无法查看父函数创建的内容?是吗?还是不?

想象一下这种情况:

void ParentMethod1()
{
 object something1;
 call_func();
}

void ParentMethod2()
{
 object somethingdifferent1;
 call_func();
}

void call_func()
{
  object scopeObject;
}

您认为call_func可以使用哪些对象?

如果call_func是公开的并且从完全不同的程序集中调用,该怎么办?

基本上,函数( method )只能访问在其中创建,作为参数传递给它的任何变量,或者作为类级变量可用。