Zitat: |
wenn struct Test0 in Class Test1 als werttype oder als instanz (per new) deklariert wird |
Huh? Ein struct kann man nicht als Instanz deklarieren/erstellen. Das new Keyword ist da evtl etwas missführend.
Ein Struct hat immer einen paraameterlosen default Constructor, der aufgerufen wird wenn der Struct nicht explizit erstellt wird. Eg: (Point sei ein Struct mit den öffentlichen Properties X & Y)
C#-Quelltext
1: 2:
| Point mypnt; mpnt.X ;---> enthällt 0 |
Eine explizite Zuweisung/"Instanzierung" ist nicht nötig. Ein struct kann schon daher nie NULL sein.
Folgendes ist gleichwertig:
C#-Quelltext
1: 2:
| Point mypnt = new Point(0,0); mpnt.X ;---> enthällt 0 |
Sobald du deine Structs in Klassen hast, landen die sowieso auf dem Heap; Sehr oft hat man diese ja in Listen usw. Lediglich bei lokalen Variablen / (evtl. Rekursionen) landen diese auch wirklich auf dem Stack.
However, in C# sollte das Design nicht nach solchen Performance Details ausgelegt werden (diese sind IMHO minimal), sondern ob es sich bei den Elementen wirklich um identitätslose Werte handelt.