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
ยังหมายถึงนักพัฒนากำลังออกจากโปรแกรมของพวกเขาถึงการตีความในสถานที่ที่มีคำตอบเดียวที่ถูกต้อง เมื่อไม่ผูกกับผิดประเภทก็สามารถปล่อยให้นักพัฒนาแก้จุดบกพร่องสำหรับชั่วโมงยื่นข้อบกพร่องในทีมของคอมไพเลอร์และโดยทั่วไปจะเสียเวลาที่จะได้รับการบันทึกไว้โดยใช้String
string
อีกวิธีในการมองเห็นความแตกต่างคือกับตัวอย่างนี้:
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