C # struct initialisering med kompileringsfeil men går riktig

stemmer
-1

Inne XNA struct Vektor2 er to offentlige variabler X og Y. Jeg har følgende kode:

Vektor2 v; if (b) vX = 1; annet Vy = 2;

// bruk v

Kompilatoren gir Bruk av tilordnet lokal variabel 'v' Men det går riktig likevel.

Er det en mer korrekt måte å gjøre det?

Publisert på 30/07/2009 klokken 07:19
kilden bruker
På andre språk...                            


3 svar

stemmer
4

C # må du tilordne en verdi til din lokale variabler før du bruker dem.

Vector2 v = new Vector2();
Svarte 30/07/2009 kl. 07:21
kilden bruker

stemmer
2

Det fungerer fordi en struct automatisk initialisert. Alle medlemmene er satt til sin type standardverdi. Men hvis du bruker en ledig variabel som dette, er det som regel fordi du glemte å tildele det før. Jeg antar kompilatoren gjør ikke en forskjell mellom structs og klasser her.

Svarte 30/07/2009 kl. 07:49
kilden bruker

stemmer
0

IMHO, dette er en veldig dårlig idé. Structs i C # er verdityper. C # pålegger en rekke restriksjoner for å sikre at alle felt av en struct er initialisert:

  • Standard konstruktører er ikke tillatt.
  • Konstruktører må initialisere alle felt innenfor struct.

Hvis du ikke instantiate en struct gjennom en konstruktør, da alle medlemmer er satt til resultatet av ringer default()på medlemstypen. Dette gjør structs som skal brukes i arrays. Den gjør det også hva du gjør, men er også årsaken til advarselen.

Ideelt sett bør du definere en konstruktør og initialisere struct med konstruktøren.

Edit: For å klargjøre begrensning på standard (parameterless) konstruktør, kan du ikke eksplisitt definerer en, fordi kompilatoren gir en, som den bruker til å initialisere alle medlemmer.

Svarte 30/07/2009 kl. 08:19
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more