การอัปเดตที่สำคัญ (12 เมษายน 2559):
เราทราบดีว่ามาตรฐานภายในของทีม. NET CoreFX ยืนยันที่จะใช้เครื่องหมายขีดล่างโดยไม่ต้องให้ข้อมูลเชิงลึกเกี่ยวกับสาเหตุใด ๆ แต่ถ้าเรามองอย่างใกล้ชิดที่กฎ # 3 มันจะกลายเป็นที่เห็นได้ชัดว่ามีความเป็นระบบของ_, t_, s_คำนำหน้าที่แสดงให้เห็นว่าทำไม_ได้รับการคัดเลือกในครั้งแรก
- เราใช้
_camelCaseสำหรับเขตข้อมูลภายในและส่วนตัวและใช้แบบอ่านอย่างเดียวเท่าที่จะทำได้ เขตคำนำหน้าเช่นกับ_เขตข้อมูลคงที่พร้อมและสาขาด้ายคงที่พร้อมs_ t_เมื่อใช้กับฟิลด์คงที่readonlyควรมาหลังจากstatic(เช่นstatic readonlyไม่readonly static)
- เราหลีกเลี่ยง
this.เว้นแต่จำเป็นจริงๆ
ดังนั้นหากคุณเป็นเหมือนทีมงาน. NET CoreFX ที่ทำงานเกี่ยวกับประสิทธิภาพที่สำคัญรหัส multithreaded ระดับระบบแสดงว่าคุณได้รับข้อเสนอแนะอย่างมากจาก:
- ปฏิบัติตามมาตรฐานการเข้ารหัสและ
- ใช้เครื่องหมายขีดล่างและ
- อย่าอ่านคำตอบนี้อีก
มิฉะนั้นโปรดอ่านต่อ ...
คำตอบเดิม:
ก่อนอื่นให้เราเห็นด้วยกับสิ่งที่เรากำลังพูดถึง คำถามคือวิธีที่เราเข้าถึงสมาชิกอินสแตนซ์จากภายในวิธีที่ไม่คงที่และตัวสร้างของคลาส / คลาสย่อยหากตัวดัดแปลงการมองเห็นอนุญาตให้ทำเช่นนั้นได้
ขีดสัญกรณ์
- แนะนำให้คุณใช้คำนำหน้า "_" ในชื่อของฟิลด์ส่วนตัว
- มันยังบอกด้วยว่าคุณไม่ควรใช้ "สิ่งนี้" เว้นแต่จะจำเป็นจริงๆ
นี้สัญกรณ์
- แนะนำให้คุณใช้ "สิ่งนี้" เสมอ เพื่อเข้าถึงสมาชิกอินสแตนซ์ใด ๆ
ทำไมเครื่องหมายนี้ถึงมีอยู่?
เพราะนี่คือสิ่งที่คุณเป็น
- บอกพารามิเตอร์จากฟิลด์เมื่อแบ่งใช้ชื่อเดียวกัน
- ตรวจสอบให้แน่ใจว่าคุณกำลังทำงานในบริบทของอินสแตนซ์ปัจจุบัน
ตัวอย่าง
public class Demo
{
private String name;
public Demo(String name) {
this.name = name;
}
}
ทำไมไม่มีเครื่องหมายขีดล่างอยู่?
บางคนไม่ชอบพิมพ์ "นี่" แต่พวกเขายังต้องการวิธีแยกความแตกต่างของเขตข้อมูลและพารามิเตอร์ดังนั้นพวกเขาจึงตกลงที่จะใช้ "_" ที่ด้านหน้าของเขตข้อมูล
ตัวอย่าง
public class Demo
{
private String _name;
public Demo(String name) {
_name = name;
}
}
บางคนอาจคิดว่ามันเป็นแค่เรื่องของรสนิยมส่วนตัวและทั้งสองวิธีนั้นดี / ไม่ดีเท่ากัน อย่างไรก็ตามมีบางแง่มุมที่สัญกรณ์นี้เป็นเครื่องหมายขีดล่าง:
ความชัดเจน
- ขีดล่างของชื่อ clutters
- สัญกรณ์นี้ทำให้ชื่อเหมือนเดิม
โหลดทางปัญญา
เครื่องหมายขีดล่างไม่สอดคล้องกันทำให้คุณจัดการฟิลด์ด้วยวิธีพิเศษ แต่คุณไม่สามารถใช้กับสมาชิกคนอื่น ๆ ทุกครั้งที่คุณต้องถามตัวเองว่าคุณต้องการทรัพย์สินหรือฟิลด์
สัญกรณ์นี้สอดคล้องกันคุณไม่ต้องคิดคุณแค่ใช้ "สิ่งนี้" เพื่ออ้างอิงถึงสมาชิกใด ๆ
UPDATE: ตามที่ชี้ให้เห็นต่อไปนี้ไม่ใช่จุดได้เปรียบ
ซ่อมบำรุง
เติมข้อความอัตโนมัติ
เมื่อคุณต้องการดูรายการสมาชิกอินสแตนซ์:
- เครื่องหมายขีดล่างไม่ช่วยอะไรคุณมากนักเพราะเมื่อคุณพิมพ์ "_" ป๊อปอัพเติมข้อความอัตโนมัติจะแสดงฟิลด์ส่วนตัวและทุกประเภทที่มีอยู่จากแอสเซมบลีที่เชื่อมโยงซึ่งผสมกับสมาชิกอินสแตนซ์ที่เหลือ
- สัญลักษณ์นี้ให้คำตอบที่ชัดเจนโดยพิมพ์ "สิ่งนี้" ที่คุณเห็นคือรายชื่อสมาชิกและไม่มีอะไรอื่น
ความคลุมเครือ
บางครั้งคุณต้องจัดการกับโค้ดโดยไม่ต้องใช้ Intellisense ตัวอย่างเช่นเมื่อคุณทำการตรวจสอบโค้ดหรือเรียกดูซอร์สโค้ดออนไลน์
เครื่องหมายขีดล่างไม่ชัดเจน: เมื่อคุณเห็นบางสิ่งบางอย่างบางสิ่งบางอย่างคุณไม่สามารถบอกได้ว่าบางสิ่งบางอย่างเป็นคลาสและ SomethingElse เป็นคุณสมบัติคงที่ ... หรืออาจเป็นบางสิ่งบางอย่างเป็นคุณสมบัติอินสแตนซ์ปัจจุบันซึ่งมีคุณสมบัติของ SomethingElse
สัญลักษณ์นี้มีความชัดเจน: เมื่อคุณเห็นบางสิ่งบางอย่างบางสิ่งบางอย่างมันสามารถหมายถึงคลาสที่มีคุณสมบัติคงที่เท่านั้นและเมื่อคุณเห็นสิ่งนี้บางสิ่งบางอย่างบางสิ่งบางอย่างคุณรู้ว่าบางสิ่งเป็นสมาชิกและ SomethingElse เป็นคุณสมบัติของมัน
วิธีการขยาย
คุณไม่สามารถใช้วิธีการส่วนขยายกับอินสแตนซ์ของตัวเองโดยไม่ใช้ "สิ่งนี้"
- เครื่องหมายขีดล่างกำหนดว่าคุณไม่ต้องใช้ "สิ่งนี้" อย่างไรก็ตามด้วยวิธีการขยายที่คุณต้องทำ
- สัญกรณ์นี้ช่วยให้คุณประหยัดจากความลังเลคุณมักจะใช้ "นี่" ระยะเวลา
การสนับสนุน Visual Studio
คำแนะนำอย่างเป็นทางการ
มีแนวทางอย่างเป็นทางการมากมายที่พูดอย่างชัดเจนว่า "อย่าใช้ขีดเส้นใต้" โดยเฉพาะใน C #