我需要关于结构的建议。C#编译器错误:“结构中不能有实例字段初始值设定项”
我有2个部分的代码。第一部分是如下:
namespace Project.GlobalVariables
{
class IOCard
{
struct InputCard
{
public string CardNo;
public int BaseAddress;
public int LowerAddress;
public int UpperAddress;
public int[] WriteBitNo = new int[16];
public int[] ReadBitNo = new int[16];
}
static InputCard[] InputCards = new InputCard[5];
public static string ACardNo = InputCards[1].CardNo;
public static string BCardNo = InputCards[2].CardNo;
}
}
第二部分是如下:
private void Form1_Load(object sender, EventArgs e)
{
IOCard.ACardNo = "Card A";
IOCard.BCardNo = "Card B";
MessageBox.Show(IOCard.ACardNo);
MessageBox.Show(IOCard.BCardNo);
}
我的计划是能够分配和由如图Form1_Load
使用IOCard
检索InputCards
组件。
但是,当我编译代码时,出现以下错误。
Error 1 'Project.GlobalVariables.IOCard.InputCard.WriteBitNo': cannot have instance field initializers in structs E:\Programming\New platform\StandardPlatform\StandardPlatform\Project\GlobalVariables.cs 16 26 StandardPlatform
有人能告诉我如何解决错误? 请指教。谢谢。
这里是我尝试创建和使用的类,但失败了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Project.GlobalVariables
{
static class IOCard
{
public const int TotalInputCard = 10;
public const int TotalOutputCard = 10;
public class InputCard
{
public string CardNo = "1";
public int BaseAddress;
public int LowerAddress;
public int UpperAddress;
public int[] WriteBitNo = new int[16];
public int[] ReadBitNo = new int[16];
}
public class OutputCard
{
public string CardNo;
public int BaseAddress;
public int LowerAddress;
public int UpperAddress;
public int[] WriteBitNo = new int[16];
public int[] ReadBitNo = new int[16];
}
public static InputCard[] InputCards = new InputCard[TotalInputCard];
public static OutputCard[] OutputCards = new OutputCard[TotalOutputCard];
public static int X100 = InputCards[0].WriteBitNo[0];
public static int Y100 = OutputCards[0].WriteBitNo[0];
}
}
我试图在使用这些,就像这样:
private void Form1_Load(object sender, EventArgs e)
{
IOCard.X100 = 1;
IOCard.Y100 = 1;
}
不管我多么试图在网上搜索答案,我也毫无进展。
请指教。谢谢。
对不起。无法理解你的意思是“动态创建”? – 2010-12-10 06:15:26
当您将结构变量传递给函数或将其从函数中返回时,整个变量将被复制(“动态创建”)。当你传递一个类变量时,只发送对该实例的引用。如果数据少于16个字节,则复制整个实例的速度实际上比将参考传递给它要快。当一个结构体变大时,它会变得更慢,因为无论何时传递的数据都必须复制更多的数据。 – Excrubulent 2013-11-25 19:43:50