구조체에 대한 조언이 필요합니다.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;
}
}
제 2 부분은 아래와 같다 :
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];
}
}
나는 그렇게처럼
Form_Load
에서 다음을 사용하려고 : 아무리 내가 답변을 인터넷에서 검색하는 것을 시도했다 얼마나
private void Form1_Load(object sender, EventArgs e)
{
IOCard.X100 = 1;
IOCard.Y100 = 1;
}
, 나는 아무데도 없어했다.
알려 주시기 바랍니다. 감사.
죄송합니다. "동적으로 만드는 것"보다는 "동적으로 만드는 것"을 이해할 수 없습니까? –
구조체 변수를 함수에 전달하거나 함수에서 반환하면 전체 변수가 복사됩니다 ("동적으로 생성됨"). 클래스 변수를 전달하면 해당 인스턴스에 대한 참조 만 전송됩니다. 데이터가 16 바이트보다 작 으면 참조를 전달하는 것보다 전체 인스턴스를 복사하는 것이 실제로 빠릅니다. 구조체가 커질수록 더 많은 데이터가 복사 될 때마다 복사해야하므로 더 느리게됩니다. – Excrubulent