如何参考out适用于具有局部变量的方法?

时间:2015-03-10 10:10:58

标签: c# methods access-modifiers

我们不能为方法中的字段指定访问修饰符,我怀疑的原因是方法内的字段(即局部变量)应该只在该特定方法内具有范围,因此不需要指定访问修饰符

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如何在其范围限于特定方法时传递变量地址(引用)?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

尝试在方法中声明private变量是没有意义的。因为默认情况下,您无法访问方法外的变量。您在方法中声明的变量称为局部变量。因此,允许给它一个访问修饰符

是没有任何意义的

答案 2 :(得分:1)

  

如果方法字段的范围在该方法中,那么ref和out如何跨方法工作?我知道它们是通过引用传递的,但是当它的范围限于特定方法时,CLR如何传递变量地址(引用)?

变量地址未绑定到它的范围。当您拥有该地址时,您可以从任何地方访问该地址中的对象。只要您在ref或{{{{}}中进行更改,就会使用此地址1}}参数。编译器使用它来访问和操作实际数据。因此范围与它无关。

答案 3 :(得分:0)

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

例如,您可能不希望除了您自己的类之外的任何类访问变量,或者您只是希望同一个包中的子类和类来访问它。这就是改性剂的作用。

然而,方法变量不能被该方法之外的任何东西访问,并且不会比方法完成所花费的时间更长,所以在方法中没有任何修饰符。变量访问是固定的,因为它的范围非常有限。