Necesito asesoramiento sobre estructuras.Error del compilador de C#: "no puede tener inicializadores de campo de instancia en las estructuras"
Tengo 2 secciones de código. La primera sección es la siguiente:
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;
}
}
La segunda parte es la siguiente:
private void Form1_Load(object sender, EventArgs e)
{
IOCard.ACardNo = "Card A";
IOCard.BCardNo = "Card B";
MessageBox.Show(IOCard.ACardNo);
MessageBox.Show(IOCard.BCardNo);
}
Mi plan es ser capaz de asignar y recuperar InputCards
componente utilizando IOCard
como se muestra en Form1_Load
.
Sin embargo, cuando compilo el código, aparece el siguiente error.
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
¿Alguien me puede decir cómo solucionar el error? por favor asesorar. Gracias.
Estas son las clases que he intentado crear y usar, pero han fallado.
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];
}
}
He intentado utilizar estos en el , así:
private void Form1_Load(object sender, EventArgs e)
{
IOCard.X100 = 1;
IOCard.Y100 = 1;
}
No importa lo mucho que he tratado de buscar en la red en busca de respuestas, me han llevado a ninguna parte.
Por favor, asesorar. Gracias.
Disculpa. ¿No entendiste lo que quieres decir con "que crear dinámicamente"? –
Cuando pasa una variable struct o la devuelve desde una función, la variable completa se copia ("creada dinámicamente"). Cuando pasa una variable de clase, solo se envía una referencia a esa instancia. Si los datos son menos de 16 bytes, en realidad es más rápido copiar toda la instancia que pasarle una referencia. Cuando una estructura crece, se vuelve más lenta porque se deben copiar muchos más datos cada vez que se pasan a otra parte. – Excrubulent