Ich brauche Beratung über Strukturen.C# -Compiler-Fehler: "kann keine Instanz Feldinitialisierer in Strukturen haben"
Ich habe 2 Abschnitte des Codes. Der erste Abschnitt ist wie folgt:
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;
}
}
Der zweite Teil ist wie folgt:
private void Form1_Load(object sender, EventArgs e)
{
IOCard.ACardNo = "Card A";
IOCard.BCardNo = "Card B";
MessageBox.Show(IOCard.ACardNo);
MessageBox.Show(IOCard.BCardNo);
}
Mein Plan ist in der Lage sein InputCards
Komponente zuweisen und Abrufen unter Verwendung IOCard
wie in Form1_Load
gezeigt.
Wenn ich jedoch den Code kompiliere, erhalte ich den folgenden Fehler.
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
Kann mir jemand sagen, wie ich den Fehler beheben kann? Bitte beraten. Vielen Dank.
Hier sind die Klassen, die ich zu erstellen und zu verwenden versucht habe, aber fehlgeschlagen.
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];
}
}
Ich habe versucht, diese in der , wie so zu verwenden:
private void Form1_Load(object sender, EventArgs e)
{
IOCard.X100 = 1;
IOCard.Y100 = 1;
}
Egal, wie viel ich habe nach Antworten auf dem Netz suchen versucht, ich habe nirgendwo bekam.
Bitte beraten. Vielen Dank.
Entschuldigung. Konnte nicht verstehen, was Sie mit "als dynamisch erstellen" meinen? –
Wenn Sie eine Strukturvariable an eine Funktion übergeben oder von einer Funktion zurückgeben, wird die gesamte Variable kopiert ("dynamisch erstellt"). Wenn Sie eine Klassenvariable übergeben, wird nur ein Verweis auf diese Instanz gesendet. Wenn die Daten kleiner als 16 Byte sind, ist es tatsächlich schneller, die gesamte Instanz zu kopieren, als einen Verweis darauf zu übergeben. Wenn eine Struktur größer wird, wird sie langsamer, da viel mehr Daten kopiert werden müssen, wenn sie irgendwo übergeben werden. – Excrubulent