• 字段初始值无法引用非静态字段、方法或属性“ ”


    我在敲银行叫号系统时,想把控制台弄到窗体上,然后我想设置一个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还没被初始化,所以编译会报错。

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

  • 相关阅读:
    java导入导出下载Excel,xls文件(带下拉框)
    java操作poi生成excel.xlsx(设置下拉框)下载本地和前端下载
    layui文件上传中如何先判断后再弹出文件选择框
    下载excle文件之工具
    eclipse 配置JDK
    layer实现关闭弹出层刷新父界面功能详解
    兼容ie9以下支持媒体查询和html5
    layui学习地址
    MATLAB拟合正态分布
    Matlab文件操作
  • 原文地址:https://www.cnblogs.com/mengwy/p/8306363.html
Copyright © 2020-2023  润新知