我们不能为方法中的字段指定访问修饰符,我怀疑的原因是方法内的字段(即局部变量)应该只在该特定方法内具有范围,因此不需要指定访问修饰符
class Program
{
public static void Main()
{
int Y;
Test(out Y);
}
private static void Test(out int X)
{
X = 17;
}
}
问题:
如果方法字段的范围在该方法中,那么ref
和out
如何跨方法工作?我知道它们是passed by reference
但CLR如何在其范围限于特定方法时传递变量地址(引用)?
答案 0 :(得分:1)
这些local variables只能在方法的代码块(methodName{..code-block-here..}
)范围内访问,您无法为它们指定任何其他可访问级别 - 没有从外部访问它们世界。
答案 1 :(得分:1)
尝试在方法中声明private
变量是没有意义的。因为默认情况下,您无法访问方法外的变量。您在方法中声明的变量称为局部变量。因此,允许给它一个访问修饰符
答案 2 :(得分:1)
如果方法字段的范围在该方法中,那么ref和out如何跨方法工作?我知道它们是通过引用传递的,但是当它的范围限于特定方法时,CLR如何传递变量地址(引用)?
变量地址未绑定到它的范围。当您拥有该地址时,您可以从任何地方访问该地址中的对象。只要您在ref
或{{{{}}中进行更改,就会使用此地址1}}参数。编译器使用它来访问和操作实际数据。因此范围与它无关。
答案 3 :(得分:0)
修饰符用于控制外部类对变量的访问。
例如,您可能不希望除了您自己的类之外的任何类访问变量,或者您只是希望同一个包中的子类和类来访问它。这就是改性剂的作用。
然而,方法变量不能被该方法之外的任何东西访问,并且不会比方法完成所花费的时间更长,所以在方法中没有任何修饰符。变量访问是固定的,因为它的范围非常有限。