Rumah >pembangunan bahagian belakang >C++ >Bolehkah saya Mengakses Objek Jenis Tanpa Nama C# di Luar Skop Yang Diisytiharkan?
Jenis tanpa nama dalam C# menyediakan cara yang mudah untuk mencipta objek ad-hoc yang ringan. Walau bagaimanapun, mengakses objek ini di luar skop tempat ia diisytiharkan boleh mencabar.
Pertimbangkan kod sampel di bawah:
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }).FirstOrDefault(); return a; }
Di sini, objek jenis tanpa nama dicipta dalam kaedah FuncA dan dikembalikan sebagai obj. Walau bagaimanapun, dalam kaedah FuncB, pengkompil mengadu bahawa obj tidak mengandungi definisi untuk Nama.
Mengapa kita tidak boleh mengakses sifat objek jenis tanpa nama di luar skop yang diisytiharkan?
Jenis tanpa nama pada asasnya ialah kelas yang dijana pengkompil yang melaksanakan antara muka ditaip kuat. Apabila anda mencipta jenis tanpa nama, pengkompil menjana nama jenis unik untuk setiap jenis tanpa nama unik yang dicipta. Jenis ini adalah unik kepada perhimpunan yang diisytiharkan dan tidak boleh diakses di luar perhimpunan itu.
Bolehkah kita mengakses objek jenis awanama di luar skop yang diisytiharkan?
Secara teknikal, ya. Walau bagaimanapun, ia amat tidak digalakkan kerana kemungkinan penalti prestasi dan isu keselamatan.
Satu kaedah, yang dikenali sebagai "buang melalui contoh" melibatkan penggunaan refleksi untuk menghantar objek jenis tanpa nama kepada jenis contoh yang diketahui. Walau bagaimanapun, penyelesaian ini adalah kompleks, tidak boleh dipercayai dan boleh berhenti dengan perubahan pengkompil pada masa hadapan.
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); }
Adalah penting untuk ambil perhatian bahawa mengakses objek jenis tanpa nama di luar skop yang diisytiharkan boleh membawa kepada tingkah laku yang tidak dijangka dan secara amnya tidak disyorkan .
Atas ialah kandungan terperinci Bolehkah saya Mengakses Objek Jenis Tanpa Nama C# di Luar Skop Yang Diisytiharkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!