为什么在方法或除C#中的类之外的任何块中都不允许使用公共变量?

Tk1993

我面临一个非常奇怪的问题,当我尝试在string类的方法内部用public关键字声明类型为变量的变量时,编译器将在没有适当说明的情况下抛出编译时错误。

考虑下面的代码:

public class MyClass
{
    public string publicVarInClass= null;  // No error here. Works fine

    public void MyMethod()
    {    // Error shown here is "Expected } "
        public string publicVarInMethod = null;  // not allowed, but no error is shown in this line. WHY?

        try // Error shown here is Invalid token 'try' in class, struct or interface declaration
        {
        //some code here
        }
    }
}

根据我的考虑,当我们在一个方法内部将一个变量除以public时,它除了该方法是一个类,结构或接口外。

这就是我的问题是,为什么C#限制我们将变量声明为public内部方法。有什么问题吗?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

变量和字段之间存在差异。只有字段具有访问保护,而不能在所有外部方法主体中访问变量。

C#中的“公共变量”称为字段C#允许字段声明仅出现在类或结构体中。字段是对象定义的一部分,可以附加到实例,也可以在所有实例之间共享。

另一方面,方法内部的变量不是字段。它们位于方法主体本地,因此不需要访问保护。它们的生存期和范围在方法内部受到限制,因此该方法之外的任何代码都无法访问局部变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在静态初始化块中不允许使用合格的静态最终变量?

为什么方法中不允许使用静态本地类?

为什么Java 8中的lambda不允许匿名类不允许成员变量的前向引用?

为什么Java 8不允许使用非公共默认方法?

C ++不允许我从基类中调用公共方法

C#不允许我将某些变量放在方法的开头。我不明白为什么不

为什么Kotlin init块中不允许使用“ return”?

为什么在通用类型中不允许T类?

为什么 Intellij 不允许我使用 VBox 类?

为什么红宝石不允许在类中访问方法,除非以模块名称为前缀

从构造函数分配Final变量| 不允许使用方法。为什么?

为什么程序集8086中不允许使用变量名称“名称”?

为什么C#不允许我在return语句中调用void方法?

为什么C#不允许静态方法实现接口?

为什么在Java或C#中不允许多重继承?

为什么在Dynamodb的KeyConditionExpression中不允许使用OR条件,还有什么替代方法?

为什么C#不允许在同一行上使用const和static?

为什么C#默认不允许使用父级的构造函数?

为什么ArrayDeque中不允许使用空值?

为什么在C中不允许使用数组大小作为常量变量,但在C ++中允许使用数组大小呢?

静态块中不允许使用公共修饰符?

为什么不允许使用“ this”指针返回成员变量,而允许使用“ this”设置成员变量?

为什么C中不允许使用表达式c =(a + b)++?

为什么在Java和C ++中不允许隐藏虚拟函数/方法?

为什么除了void之外,不允许返回条件属性方法

为什么Java 8接口方法中不允许使用“最终”?

为什么在伴随对象的应用方法中不允许使用 var/val 声明字段

为什么简单的API控制器中不允许使用DELETE方法

C ++中不允许使用静态/全局变量