Rumah >pembangunan bahagian belakang >C++ >Timbunan atau Tindanan: Di manakah `baru` Memperuntukkan Struktur dalam C#?
Peruntukan memori struktur oleh operator new
dalam C#: timbunan atau timbunan?
Apabila kelas dibuat seketika menggunakan operator new
, memori diperuntukkan pada timbunan. Walau bagaimanapun, kelakuan pengendali new
pada struktur bergantung pada senario tertentu. Mari terokai perbezaannya:
Pembina dengan parameter
Apabila memanggil pembina parameter struktur menggunakan new
, memori diperuntukkan pada tindanan. Ini serupa dengan memberikan nilai kepada pembolehubah tempatan jenis nilai.
<code class="language-csharp">Guid local = new Guid("");</code>
Kod IL yang diberikan menggunakan newobj
untuk memperuntukkan memori pada tindanan dan memulakan nilai menggunakan rentetan yang disediakan.
Pembina tanpa parameter
Apabila memanggil pembina tanpa parameter bagi struktur menggunakan new
, tingkah laku bergantung pada konteks:
Tiada memori akan diperuntukkan pada timbunan. Sebaliknya gunakan initobj
untuk memulakan lokasi storan sedia ada (medan atau pembolehubah setempat). Jenis nilai dibina di tempatnya.
<code class="language-csharp">Guid field; ... field = new Guid();</code>
Peruntukkan pembolehubah tempatan sementara pada tindanan dan mulakan ia menggunakan initobj
. Nilai ini kemudiannya diluluskan sebagai parameter kepada kaedah.
<code class="language-csharp">MethodTakingGuid(new Guid());</code>
Tiada memori akan diperuntukkan pada timbunan. Jenis nilai dibina terus di lokasi storan contoh atau pembolehubah statik.
<code class="language-csharp">myInstance.GuidProperty = new Guid();</code>
Kesimpulan
Tingkah laku tugasan pengendalinew
apabila digunakan dengan struktur bergantung pada konteks. Untuk pembina dengan parameter, memori sentiasa diperuntukkan pada timbunan. Untuk pembina tanpa parameter, memori mungkin tidak diperuntukkan pada timbunan, bergantung pada konteks. Tingkah laku ini sangat bergantung pada arahan IL yang dihasilkan oleh pengkompil semasa menukar kod C#.
Atas ialah kandungan terperinci Timbunan atau Tindanan: Di manakah `baru` Memperuntukkan Struktur dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!