ref & out 如何跨方法使用局部变量?

How ref & out works across methods with local variables?

我们不能为方法中的字段指定访问修饰符,我怀疑这样做的原因是方法中的字段(即局部变量)应该只在该特定方法中具有作用域,因此无需指定访问修饰符。

class Program
    {
        public static void Main()
        {
            int Y;
            Test(out Y);
        }

        private static void Test(out int X)
        {
            X = 17;
        }
    }

问题:

如果方法字段的范围在该方法内,那么 refout 如何跨方法工作?我知道它们是 passed by reference,但是当 CLR 的范围仅限于该特定方法时,CLR 如何传递该变量地址(引用)?

这些 local variables 只能在方法的代码块 (methodName{..code-block-here..}) 范围内访问,您不能为它们指定任何其他可访问级别 - 从外面的世界。

尝试在方法中声明 private 变量毫无意义。因为默认情况下你不能访问方法外的变量。在方法中声明的变量称为局部变量。所以允许给它一个访问修饰符

是没有任何意义的

修饰符用于控制外部class对变量的访问。

例如,您可能不希望除您自己的任何 class 访问变量,或者您只希望同一包中的子classes 和 classes 访问访问它。这就是修改器的工作。

然而,方法变量不能被该方法之外的任何东西访问,并且不会存在超过方法完成所需的时间,因此在方法内部使用修饰符真的没有意义.变量访问是固定的,因为它的范围非常有限。

If scope of method field is within that method then how ref and out works across methods? I know they are passed by reference but how CLR can pass that variables address(reference) when its scope is limited to that particular method?

变量地址未绑定到它 scope.When 你有地址,你可以从任何地方访问该地址中的对象 want.This 只要你在 refout 参数。编译器使用它来访问和操作实际的 data.So 范围与它无关。