繁体   English   中英

C#中局部变量和字段的数组声明和数组内存分配的差异

[英]difference in array declaration and array memory allocation for local variables and fields in C#

我有上面列出的问题。 C#中局部变量和字段的数组声明和数组内存分配的差异

我正在WindowsForm应用程序上工作,但我想声明一些数组。

公共局部类Form1:Form中 ,我无法单独声明数组并单独进行内存分配( 如果我执行int [] numero = new int [5],则可以 ),但不能分开(分两步),如下面的代码所示它不是。

当我将变量numero圈起来时,VS将其标记为字段 我在派生类公共Form1()中做了同样的事情,它一步一步就可以正常工作(int [] numero = new int [4]),并且可以按照下面的代码两步进行。 当我将变量casinumero环绕时 ,它将其标记为局部变量 所以问题是:

为什么字段声明不能像现场变量那样一步一步地完成数组声明和内存分配?

public partial class Form1 : Form
    {
        public int [] numero;
        numero = new int[5];

        public Form1()
       {
            InitializeComponent();
            int[] casinumero;
            casinumero = new int[4];
       }
    }

这是声明:

public int [] numero;

下面是实例化。 另一种表达方式: 使用变量。 您通过向变量赋值或显式初始化来使用该变量。

numero = new int[5];

您不能在类级别使用变量。

C#规范:

创建该类的新实例时,该类的实例变量就存在了,

因此,您不能在创建实例之前使用它。

您可以声明它。 如果不初始化,它将具有默认的初始值。 默认值取决于类型。 对于引用类型,与数组一样,它将被初始化为null 这称为定值分配 ,它是C#规则之一。

但是,您可以执行此操作(请注意行内注释):

public class Example
{
    // Declared here and it will be defaulted to null since we never
    // initialized it explicitly.
    public int[] numero;

    // Or we can initialize it and declare it in one step:
    // public int[] numero = new int[5];

    public Example()
    {
        // Now we are in the constructor, we can use the variable and 
        // explicitly initialize it.
        numero = new int[5];

        int[] casinumero;
        casinumero = new int[4];
    }

    public void SomeMethod()
    {
        // Or we can use it in a method
        numero = new int[5];
    }
}

暂无
暂无

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

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