ใน C # using
คำสั่งจะถูกใช้เพื่อกำจัดทรัพยากรอย่างไม่ถูกต้องโดยไม่ต้องรอการเก็บขยะ ตัวอย่างเช่นอาจใช้เพื่อ:
กำจัดคำสั่งหรือการเชื่อมต่อ SQL
ปิดสตรีมปล่อยแหล่งข้อมูลอ้างอิงเช่นไฟล์
องค์ประกอบ GDI + ฟรี
เป็นต้น
ฉันสังเกตเห็นว่าusing
มีการใช้งานมากขึ้นในกรณีที่ไม่มีสิ่งใดที่จะกำจัด แต่ที่มันสะดวกกว่าสำหรับผู้โทรที่จะเขียนusing
บล็อกแทนที่จะเป็นสองคำสั่งแยกกัน
ตัวอย่าง:
MiniProfilerเขียนโดยทีม Stack Overflow ใช้
using
เพื่อแสดงถึงบล็อกในโปรไฟล์:using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); }
ทางเลือกหนึ่งที่จะมีสองช่วงตึก:
var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p);
อีกวิธีหนึ่งคือการใช้การกระทำ:
profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1));
ASP.NET MVC ยังเลือก
using
สำหรับแบบฟอร์ม:<% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> <input type="submit" value="Save" /> <% } %>
การใช้งานดังกล่าวเหมาะสมหรือไม่? วิธีการพิสูจน์ความถูกต้องเนื่องจากมีข้อบกพร่องหลายประการ:
ผู้เริ่มต้นจะหายไปเนื่องจากการใช้งานดังกล่าวไม่ตรงกับที่อธิบายไว้ในหนังสือและข้อกำหนดทางภาษา
รหัสควรแสดงออก ที่นี่การแสดงออกที่ได้รับความเดือดร้อนเนื่องจากการใช้งานที่เหมาะสมของ
using
การแสดงให้เห็นว่าข้างหลังมีทรัพยากรเช่นกระแสการเชื่อมต่อเครือข่ายหรือฐานข้อมูลที่ควรได้รับการปล่อยตัวโดยไม่ต้องรอเก็บขยะ
using
: คำสั่งหลัง (เช่นprofiler.Stop(p)
) ไม่รับประกันว่าจะถูกดำเนินการเมื่อเผชิญกับข้อยกเว้นและโฟลว์การควบคุม