string เมื่อเทียบกับ Stringไม่ใช่การอภิปรายสไตล์
[ ... ]
คำหลักstringมีความหมายที่ชัดเจนใน C # เป็นชนิดSystem.Stringที่มีอยู่ในชุดประกอบหลักของรันไทม์ รันไทม์เข้าใจอย่างแท้จริงชนิดนี้และให้ความสามารถในการพัฒนาคาดหวังสำหรับสตริงใน. NET การมีอยู่ของมันสำคัญมากสำหรับ C # ซึ่งหากประเภทนั้นไม่มีอยู่คอมไพเลอร์จะออกก่อนที่จะพยายามแยกวิเคราะห์บรรทัดของโค้ด ด้วยเหตุนี้stringมีความหมายที่แม่นยำและชัดเจนในรหัส C #
Stringแม้ว่าตัวระบุจะไม่มีความหมายที่เป็นรูปธรรมใน C # มันเป็นตัวบ่งชี้ที่จะไปผ่านทุกกฎการค้นหาชื่อเป็นWidget, Studentฯลฯ ... stringมันอาจจะผูกกับสตริงหรือมันอาจจะผูกกับชนิดอื่นในการชุมนุมทั้งหมดที่มีวัตถุประสงค์เพื่อการอาจแตกต่างอย่างสิ้นเชิง ยิ่งไปกว่านั้นมันอาจจะถูกกำหนดในลักษณะที่รหัสเช่นString s = "hello"; รวบรวมอย่างต่อเนื่อง
class TricksterString {
void Example() {
String s = "Hello World"; // Okay but probably not what you expect.
}
}
class String {
public static implicit operator String(string s) => null;
}
ความหมายที่แท้จริงของStringจะขึ้นอยู่กับการแก้ไขชื่อ ซึ่งหมายความว่าขึ้นอยู่กับไฟล์ต้นฉบับทั้งหมดในโครงการและประเภททั้งหมดที่กำหนดในแอสเซมบลีที่อ้างอิงทั้งหมด ในระยะสั้นมันต้องบริบทค่อนข้างที่จะรู้ว่ามันหมายถึงอะไร
จริงว่าในกรณีส่วนใหญ่Stringและstringจะผูกกับประเภทเดียวกัน แต่การใช้Stringยังหมายถึงนักพัฒนากำลังออกจากโปรแกรมของพวกเขาถึงการตีความในสถานที่ที่มีคำตอบเดียวที่ถูกต้อง เมื่อไม่ผูกกับผิดประเภทก็สามารถปล่อยให้นักพัฒนาแก้จุดบกพร่องสำหรับชั่วโมงยื่นข้อบกพร่องในทีมของคอมไพเลอร์และโดยทั่วไปจะเสียเวลาที่จะได้รับการบันทึกไว้โดยใช้Stringstring
อีกวิธีในการมองเห็นความแตกต่างคือกับตัวอย่างนี้:
string s1 = 42; // Errors 100% of the time
String s2 = 42; // Might error, might not, depends on the code
หลายคนอาจแย้งว่าในขณะที่ข้อมูลนี้มีความถูกต้องทางเทคนิคการใช้Stringยังคงใช้ได้เพราะมันหายากเหลือเกินที่ฐานรหัสจะกำหนดประเภทของชื่อนี้ หรือว่าเมื่อไหร่Stringมีการกำหนดมันเป็นสัญญาณของรหัสฐานที่ไม่ดี
[ ... ]
คุณจะเห็นว่าStringมีการกำหนดไว้สำหรับวัตถุประสงค์ที่ถูกต้องจำนวนหนึ่ง: ผู้ช่วยเหลือการสะท้อน, ไลบรารีการทำให้เป็นอนุกรม, lexers, โปรโตคอล ฯลฯ ... สำหรับไลบรารีใด ๆ เหล่านี้Stringเทียบกับstringผลที่เกิดขึ้นจริงขึ้นอยู่กับตำแหน่งที่ใช้รหัส
ดังนั้นจำไว้ว่าเมื่อคุณเห็นการStringปะทะกับstringการอภิปรายนี่เป็นเรื่องเกี่ยวกับความหมายไม่ใช่สไตล์ การเลือกสตริงให้ความหมายที่คมชัดกับฐานรหัสของคุณ การเลือกStringนั้นไม่ผิด แต่จะเปิดประตูทิ้งไว้เพื่อความประหลาดใจในอนาคต
หมายเหตุ: ฉันคัดลอก / วางโพสต์บล็อกส่วนใหญ่เพื่อเหตุผลการเก็บถาวร ฉันไม่สนใจบางส่วนดังนั้นฉันแนะนำให้ข้ามและอ่านโพสต์บล็อกหากคุณทำได้
stringเป็นโครงสร้างคำศัพท์ของไวยากรณ์ C # ในขณะที่System.Stringเป็นเพียงประเภท โดยไม่คำนึงถึงความแตกต่างที่ชัดเจนที่กล่าวถึงในสเปคใด ๆ ยังคงมีความแตกต่างโดยนัยนี้ที่สามารถรองรับด้วยความคลุมเครือบางอย่าง ภาษานั้นต้องสนับสนุนstringในลักษณะที่การนำไปปฏิบัติไม่ได้ (ค่อนข้าง) จึงจำเป็นต้องพิจารณาสำหรับชั้นเรียนพิเศษใน BCL