繁体   English   中英

是否可以在Ne-stead / Same Scope中的C#中多次声明相同的名称变量?

[英]Is possible to declare multiple times same name variable in c# within Ne-stead/same Scope?

namespace project1
{
    public class testclass
    {
        int i = 0;

        public int foobar()
        {
            int i = 1;
            return i;
        }
    }
}

结果:

1个

我声明两次i变量。 为什么C#编译器允许我这样做?

如果我尝试在同一作用域中声明,那么编译器将给我例外,那么为什么允许在嵌套作用域中使用呢?

这不是错误

您可以随时使用this.i来访问类声明中的int i字段,因此不会出现重叠。 实际上,这实际上是在camelCase的方法内写入(专用)字段名称,参数和局部变量的约定。 另一方面,属性,方法名,类名等用PascalCase编写。

因此,在班级中,如果您想访问班级的字段i ,可以通过编写this.i 否则,只要您在if -block内,就可以访问范围指定的变量i

namespace Project1 // PascalCase here for namespace name
{
    public class TestClass // Again PascalCase for class name.
    {
        int i = 0; // camelCase correct here for field name.

        public void Foobar() // PascalCase for method name.
        {
            if (0 == 0)
            {
                int i = 0; // camelCase correct here for local variable name. 
                           // Cannot be re-declared until your if-block is finished.

                // accessing both elements named 'i'
                this.i = i;
            }

        return;
        }
    }
}

请参阅Microsoft文档以获取更多参考。

在特定范围内声明的所有变量必须唯一。

您可以根据变量的数据类型来重用某些变量,但是是否应该重用变量取决于您的工作。

您的代码可以工作,但是您第二次声明i是不正确的,因为它已经存在且值为0。

您需要更改其值,而不是尝试重新创建变量:

namespace project1
{
    public class testclass
    {
        int i = 0;

        public void foobar()
        {
            if (0 == 0)
            {
                i = 0;
            }

            return;
        }
    }
}

您还可以创建一个新变量:

namespace project1
{
    public class testclass
    {
        int i = 0;

        public void foobar()
        {
            if (0 == 0)
            {
                int j = 0;
            }

            return;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM