zoukankan      html  css  js  c++  java
  • 字段初始值无法引用非静态字段、方法或属性“ ”

    我在敲银行叫号系统时,想把控制台弄到窗体上,然后我想设置一个cbx来输入服务柜台的数量,然后好对应开线程数组!出现这个问题

    public partial class Form1 : Form       //在这个类中会先执行字段的,然后再执行构造函数
         {
             private void Form1_Load(object sender, EventArgs e)
             {
                 for (int i = 10; i > 0; i--)
                 {
                     cbx_length.Items.Add(i);
                     cbx_wis.Items.Add(i);
                 }
                 cbx_length.SelectedIndex = 5;
                 cbx_length.SelectedIndex = 8;
             }
             public Form1()
             {
                 InitializeComponent();
                 CSeqBankQueue bank = new CSeqBankQueue(Convert.ToInt32(cbx_length.Text));
                 ServiceWindow[] sw = new ServiceWindow[Convert.ToInt32(cbx_wis.Text)];
                 Thread[] swt = new Thread[Convert.ToInt32(cbx_wis.Text)];
             }
             //错误    字段初始值无法引用非静态字段、方法或属性“QueueDs.Form1.cbx_length”
             //ServiceWindow[] sw = new ServiceWindow[Convert.ToInt32(cbx_wis.Text)];
             //Thread[] swt = new Thread[Convert.ToInt32(cbx_wis.Text)];
             //在 C# 中不允许使用未初始化的变量。

            //ServiceWindow[] sw = new ServiceWindow[];           //数组创建必须有数组大小或初始值
             Thread[] swt = new Thread[];
             private void btn_营业_Click(object sender, EventArgs e)
             {
                 ServiceWindow[] sw = new ServiceWindow[Convert.ToInt32(cbx_wis.Text)];
                 Thread[] swt = new Thread[Convert.ToInt32(cbx_wis.Text)];
             }
             private void btn_取号_Click(object sender, EventArgs e)
             {
                 for (int i = 0; i <Convert .ToInt32 ( cbx_wis.Text );i++ )
                 {
                     //建立服务柜台类数组和线程数组
                    sw[i] = new ServiceWindow();     //发现把SeverWindows[]数组写到营业事件或加载窗口里会报:当前上下文中不存在名称“sw”
                    //把队列给服务柜台类的属性BankQ!    
                    sw[i].BankQ =bank;
                    swt[i] = new Thread();
                 }

            }

    整理:在c#中写 int i= 4; 那只是一个“语法糖”,它其实是:

    class a

    {

    int i;

    public a()

    i = 4;

    .......其它语句。

    }

    问题:字段初始值设定项无法引用非静态字段、方法或属性的问题

    下面代码出错的原因,在类中定义的字段为什么不能用?
    public class Test
    {
    public Test()
    {
    }
    public int Age=23;
    public int temp = Age;//ERROR 字段初始值设定项无法引用非静态字段、方法或属性
    }

    C#规定在类内部只能定义属性或者变量,并初始化,不能直接变量引用变量。

    在初始化类实例之前就调用了字段

    c# 中字段的初始化先于构造函数。

    string y = "asdf" + x; 实际上是 y = "asdf" + this.x;

    因为这时this还没被初始化,所以编译会报错。

    属性内存和变量内存的分配的时间不一样。
    属性是用的时候分配,变量是在类初始化时候分配。

  • 相关阅读:
    Power of Cryptography
    Radar Installation
    Emag eht htiw Em Pleh
    Help Me with the Game
    89. Gray Code
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    82. Remove Duplicates from Sorted List II
  • 原文地址:https://www.cnblogs.com/mengwy/p/8306363.html
Copyright © 2011-2022 走看看