คำถามติดแท็ก c#

C # เป็นภาษาการเขียนโปรแกรมเชิงวัตถุที่มีการจัดการและรวบรวมขยะที่สร้างขึ้นโดย Microsoft ควบคู่ไปกับแพลตฟอร์ม. NET

2
เหตุใดจึงมีข้อ จำกัด () ใหม่ใน C # แต่ไม่มีข้อ จำกัด อื่นที่คล้ายคลึงกัน
ใน C # generics เราสามารถประกาศข้อ จำกัด สำหรับพารามิเตอร์ชนิดจะมีคอนสตรัคเริ่มต้นด้วยการพูดว่าT where T : new()อย่างไรก็ตามไม่มีข้อ จำกัด อื่น ๆ เช่นนี้ที่ถูกต้อง - new(string)ตัวอย่างเช่น ฯลฯ จากมุมมองของการออกแบบภาษาและ / หรือการนำไปใช้งานอะไรคือสาเหตุของสิ่งนี้? มีบางอย่างในการทำงานของคอนสตรัคเตอร์หรือวิธีการใช้งานระบบพิมพ์ที่ห้ามสิ่งนี้ (หรืออย่างน้อยก็ทำให้ยากขึ้น)? ถ้าเป็นเช่นนั้นมันคืออะไร? ผมจำได้อ่านบางที่default(T)จริงคอมไพล์สำหรับnew T() T : structมันเกี่ยวข้องกับสิ่งนี้หรือเปล่า? หรือเป็นเพียงการตัดสินใจออกแบบเพื่อหลีกเลี่ยงการทำให้ภาษาซับซ้อนเกินไป?

6
ภาษาโปรแกรมที่อนุญาตให้คุณกำหนดขีด จำกัด ใหม่สำหรับประเภทอย่างง่าย
หลายภาษาชอบC++, C#และJavaช่วยให้คุณสามารถสร้างวัตถุที่เป็นตัวแทนของประเภทง่ายๆเช่นหรือinteger floatการใช้อินเตอร์เฟสคลาสคุณสามารถแทนที่โอเปอเรเตอร์และดำเนินการตรรกะเช่นตรวจสอบว่าค่าเกินกว่ากฎธุรกิจ 100 ฉันสงสัยว่าในบางภาษาอาจมีการกำหนดกฎเหล่านี้เป็นคำอธิบายประกอบหรือคุณสมบัติของตัวแปร / คุณสมบัติ ตัวอย่างเช่นในC#คุณอาจเขียน: [Range(0,100)] public int Price { get; set; } หรือบางทีC++คุณอาจจะเขียน: int(0,100) x = 0; ฉันไม่เคยเห็นอะไรแบบนี้มาก่อน แต่ได้รับความเชื่อถือในการตรวจสอบข้อมูลก่อนการจัดเก็บ แปลกที่ฟีเจอร์นี้ไม่ได้ถูกเพิ่มลงในภาษา คุณช่วยยกตัวอย่างภาษาที่เป็นไปได้ไหม

4
“ รับหรือกำหนด .. ” จำเป็นในเอกสารประกอบ XML ของคุณสมบัติหรือไม่
ฉันกำลังมองหาคำแนะนำวิธีปฏิบัติที่ดีที่สุดสำหรับความคิดเห็น XML ใน C # เมื่อคุณสร้างคุณสมบัติดูเหมือนว่าเอกสาร XML ที่ต้องการมีรูปแบบดังต่อไปนี้: /// <summary> /// Gets or sets the ID the uniquely identifies this <see cref="User" /> instance. /// </summary> public int ID { get; set; } แต่เนื่องจากลายเซ็นของสถานที่ให้บริการจะบอกคุณว่าการดำเนินงานที่มีให้กับลูกค้าภายนอกของชั้นเรียน (ในกรณีนี้มันเป็นทั้งสองgetและset) ฉันรู้สึกเหมือนความคิดเห็นที่ช่างพูดเกินไปและอาจจะพอดังต่อไปนี้: /// <summary> /// ID that uniquely identifies this <see cref="User" /> instance. /// </summary> …

6
ข้อดีและข้อเสียในการใช้ XAML / C # หรือ HTML5 / JavaScipt สำหรับแอพ Metro? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันแค่สงสัยว่ามีข้อดีหรือข้อเสียที่สำคัญในการใช้ XAML / C # หรือ HTML5 / JavaScript สำหรับ Metro Apps หรือไม่
19 c#  javascript  html5  xaml  metro 

9
คุณควรสร้างที่พักส่วนตัวหรือไม่?
private string mWhatever; private string Whatever { get { return this.mWhatever; } set { this.mWhatever = value; } } ฉันเคยเห็นบางคนที่สร้างคุณสมบัติให้กับสมาชิกทุกคนเป็นส่วนตัวหรือไม่ ... สิ่งนี้มีเหตุผลหรือไม่? ฉันเห็นว่ามันสมเหตุสมผลใน 1% ของกรณีในบางครั้งเมื่อคุณต้องการควบคุมการเข้าถึงสมาชิกภายในชั้นเรียนที่มีเพราะถ้าคุณไม่ได้ใช้คุณสมบัติสำหรับสมาชิกทุกคนมันจะนำไปสู่ความไม่สอดคล้องกันและการตรวจสอบเพื่อดูว่า สมาชิกมีสิทธิ์เข้าถึงหรือไม่ (เนื่องจากคุณสามารถเข้าถึงได้ทั้งในขอบเขตของคลาส)
19 c# 

2
เหตุใดสถานะที่แชร์จึงทำให้ประสิทธิภาพลดลง
ฉันทำงานภายใต้หลักการที่ไม่มีส่วนแบ่งในการเขียนโปรแกรมพร้อมกัน โดยพื้นฐานแล้วเธรดผู้ทำงานทั้งหมดของฉันมีสำเนาแบบอ่านอย่างเดียวที่ไม่เปลี่ยนรูปแบบของสถานะเดียวกันซึ่งไม่เคยใช้ร่วมกันระหว่างพวกเขา ( แม้โดยการอ้างอิง ) โดยทั่วไปการพูดสิ่งนี้ใช้ได้ดีจริงๆ ตอนนี้มีคนแนะนำแคชซิงเกิลที่ไม่ล็อค ( เช่นพจนานุกรมคงที่ ) ที่เธรดทั้งหมดกำลังเข้าถึงพร้อมกัน เนื่องจากพจนานุกรมจะไม่เปลี่ยนแปลงหลังจากเริ่มต้นจึงไม่มีการล็อค ยังไม่มีปัญหาเรื่องความปลอดภัยของเธรด แต่ตอนนี้มีประสิทธิภาพลดลง คำถามคือ ... เนื่องจากไม่มีการล็อคทำไมการแนะนำซิงเกิลตันนี้จึงสร้างผลงานได้อย่างยอดเยี่ยม? เกิดอะไรขึ้นภายใต้ฝาครอบที่สามารถอธิบายสิ่งนี้ได้? เพื่อยืนยันการเข้าถึงซิงเกิลใหม่นี้เป็นการเปลี่ยนแปลงเพียงอย่างเดียวและฉันสามารถสร้างสิ่งนี้ได้อย่างน่าเชื่อถือเพียงแค่แสดงความคิดเห็นการเรียกไปยังแคช

6
คุณสมบัติควรมีผลข้างเคียง
คุณสมบัติใน C # ควรมีผลข้างเคียงนอกเหนือจากการแจ้งการเปลี่ยนแปลงสถานะหรือไม่? ฉันเคยเห็นคุณสมบัติที่ใช้ในหลายวิธี จากคุณสมบัติที่จะโหลดค่าในครั้งแรกที่เข้าถึงคุณสมบัติที่มีผลข้างเคียงจำนวนมากเช่นทำให้เกิดการเปลี่ยนเส้นทางไปยังหน้าอื่น
19 c# 

11
มาตรฐานการเข้ารหัส. NET / C # ที่แนะนำ? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ คุณคิดว่ามาตรฐานการเข้ารหัสแบบใดที่มีความสำคัญต่อโครงการ. NET / C # นี่อาจเป็นอะไรก็ได้จากการรับมือกับการจัดฟันแบบโค้งงอและการเว้นวรรค หรืออาจเป็นคำถามพื้นฐานเพิ่มเติมเช่นเนมสเปซใน. NET Framework ที่ควรหลีกเลี่ยงแนวปฏิบัติที่เหมาะสมที่สุดกับไฟล์กำหนดค่าเป็นต้น พยายามหลีกเลี่ยงการสร้างโพสต์ที่เป็นเพียงข้อพิสูจน์ไปยังอีก ตัวอย่างเช่นจะเป็นการดีถ้ามีหนึ่งโพสต์ที่เน้นที่เครื่องหมายปีกกา เราไม่ต้องการสองรูปแบบเพื่อสนับสนุนรูปแบบหนึ่งกับอีกรูปแบบหนึ่ง ความคิดนี้ไม่ได้ลงคะแนนสำหรับมาตรฐานสัตว์เลี้ยงของคุณ แต่ควรพิจารณาสิ่งที่ควรคำนึงถึงเมื่อสร้างมาตรฐาน

3
ฉันจะสำรวจต้นไม้โดยไม่ใช้การเรียกซ้ำได้อย่างไร
ฉันมีขนาดใหญ่มากในทรีโหนดหน่วยความจำและจำเป็นต้องสำรวจทรี การส่งค่าที่ส่งคืนของโหนดชายด์แต่ละโหนดไปยังโหนดพาเรนต์ สิ่งนี้จะต้องทำจนกว่าโหนดทั้งหมดจะมีบับเบิลข้อมูลจนถึงรูตโหนด การสำรวจเส้นทางทำงานเช่นนี้ private Data Execute(Node pNode) { Data[] values = new Data[pNode.Children.Count]; for(int i=0; i < pNode.Children.Count; i++) { values[i] = Execute(pNode.Children[i]); // recursive } return pNode.Process(values); } public void Start(Node pRoot) { Data result = Execute(pRoot); } ใช้งานได้ดี แต่ฉันกังวลว่า call call จะ จำกัด ขนาดของทรีโหนด วิธีการสามารถรหัสถูกเขียนใหม่เพื่อให้ไม่มีการโทร recursive จะExecuteทำ?
19 c#  optimization  trees 

4
ทำไมเราต้องการคำหลัก async
ฉันเพิ่งเริ่มเล่นกับ async / คอยใน. Net 4.5 สิ่งหนึ่งที่ฉันอยากรู้ในตอนแรกว่าทำไมคำหลัก async จึงจำเป็น คำอธิบายที่ฉันอ่านคือมันเป็นเครื่องหมายเพื่อให้คอมไพเลอร์รู้วิธีการรอบางสิ่งบางอย่าง แต่ดูเหมือนว่าคอมไพเลอร์ควรจะสามารถเข้าใจสิ่งนี้ได้โดยไม่มีคำ แล้วมันทำอะไรได้อีก?
19 c#  .net 

4
มีการใช้พอยน์เตอร์ใน C # จริงหรือไม่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา สถานการณ์ในขณะที่เขียนโค้ดใน C # เมื่อใช้พอยน์เตอร์เป็นตัวเลือกที่ดีหรือจำเป็นคืออะไร ฉันกำลังพูดถึงพอยน์เตอร์ที่ไม่ปลอดภัย
19 c#  pointers 

6
ลอง / จับ / บันทึก / Rethrow - เป็นรูปแบบการต่อต้านหรือไม่
ฉันสามารถดูโพสต์ได้หลายแห่งซึ่งมีความสำคัญของการจัดการข้อยกเว้นที่ตำแหน่งศูนย์กลางหรือที่ขอบเขตกระบวนการได้รับการเน้นว่าเป็นแนวปฏิบัติที่ดีแทนที่จะทิ้งขยะบล็อคโค้ดทุกอันรอบลอง / จับ ฉันเชื่ออย่างยิ่งว่าพวกเราส่วนใหญ่เข้าใจถึงความสำคัญของมัน แต่ฉันเห็นคนยังคงลงท้ายด้วยรูปแบบการป้องกัน catch-log-rethrow เป็นหลักเพราะเพื่อความสะดวกในการแก้ไขปัญหาในระหว่างการยกเว้นพวกเขาต้องการบันทึกข้อมูลเฉพาะบริบทเพิ่มเติม ผ่าน) และวิธีคือการห่อวิธีรอบลอง / catch / log / rethrow public static bool DoOperation(int num1, int num2) { try { /* do some work with num1 and num2 */ } catch (Exception ex) { logger.log("error occured while number 1 = {num1} and number 2 = …

2
มีกลยุทธ์บางอย่างที่เป็นระบบสำหรับการออกแบบและการใช้ GUI หรือไม่?
ฉันใช้ Visual Studio เพื่อสร้างแอปพลิเคชัน GUI ใน C # กล่องเครื่องมือทำหน้าที่เป็นพาเล็ตส่วนประกอบที่ดีที่ทำให้ฉันสามารถลากและวางปุ่มและองค์ประกอบอื่น ๆ (เพื่อความชัดเจนฉันจะพูดว่าปุ่มเมื่อใดก็ตามที่ฉันหมายถึง "การควบคุม") บนแบบฟอร์มของฉันซึ่งทำให้รูปแบบคงที่ค่อนข้างง่าย อย่างไรก็ตามฉันพบปัญหาสองประการ: การสร้างปุ่มในตอนแรกนั้นเป็นการทำงานมากมาย เมื่อฉันมีรูปแบบที่ไม่คงที่ (เช่นปุ่มหรือตัวควบคุมอื่น ๆ จะถูกสร้างขึ้นในเวลาทำงานตามสิ่งที่ผู้ใช้ทำ) ฉันไม่สามารถใช้จานสีได้เลย แต่ฉันต้องสร้างแต่ละปุ่มด้วยตนเองโดยการเรียกตัวสร้างในวิธีการใด ๆ ที่ฉันใช้แล้วเริ่มต้นด้วยตนเองโดยการระบุความสูงของปุ่มความกว้างตำแหน่งป้ายชื่อตัวจัดการเหตุการณ์และอื่น ๆ นี่เป็นเรื่องน่าเบื่ออย่างยิ่งเพราะฉันต้องเดาพารามิเตอร์เครื่องสำอางเหล่านี้โดยไม่สามารถดูว่าแบบฟอร์มจะเป็นอย่างไรและมันยังสร้างรหัสซ้ำ ๆ กันหลายบรรทัดสำหรับแต่ละปุ่ม การทำให้ปุ่มทำบางสิ่งก็เป็นเรื่องที่ต้องทำเยอะ การรับมือกับเหตุการณ์ในแอปพลิเคชั่นเต็มรูปแบบเป็นความเจ็บปวดอย่างมาก วิธีเดียวที่ฉันรู้วิธีการทำเช่นนี้คือการเลือกปุ่มไปที่แท็บกิจกรรมในคุณสมบัติคลิกOnClickเหตุการณ์เพื่อสร้างเหตุการณ์ในFormรหัสของจากนั้นกรอกเนื้อหาของเหตุการณ์ เนื่องจากฉันต้องการแยกลอจิกและการนำเสนอตัวจัดการเหตุการณ์ของฉันทั้งหมดจึงกลายเป็นการเรียกใช้บรรทัดเดียวไปยังฟังก์ชันตรรกะทางธุรกิจที่เหมาะสม แต่การใช้ปุ่มนี้สำหรับปุ่มจำนวนมาก (เช่นลองนึกภาพจำนวนปุ่มที่มีอยู่ในแอปพลิเคชั่นเช่น MS Word) ทำให้รหัสของฉันสกปรกFormด้วยวิธีการจัดการเหตุการณ์สำเร็จรูปจำนวนมากและยากที่จะรักษาสิ่งนี้ เนื่องจากสิ่งเหล่านี้โปรแกรม GUI ใด ๆ ที่ซับซ้อนกว่า Hello World จึงทำไม่ได้จริง ๆ สำหรับฉัน เพื่อความชัดเจนฉันไม่มีปัญหาใด ๆ ที่เกี่ยวข้องกับความซับซ้อนในโปรแกรมที่ฉันเขียนซึ่งมี UI …
18 c#  gui  visual-studio 

1
เหตุใด Microsoft จึงปล่อยรุ่น RESX สำหรับ RESW ในแอปพลิเคชัน Windows Store
เหตุใด Microsoft จึงเลือกเปลี่ยนระบบการจัดการทรัพยากรจากไฟล์ RESX ของ. NET RESX มีการสร้างโค้ดที่มีประโยชน์ช่วยให้นักพัฒนาสามารถเติมชื่อทรัพยากรและแสดงผลโค้ดที่อ่านง่ายมากของ IMHO รูปแบบ RESW ใหม่เท่าที่ฉันรู้ไฟล์ XML ที่เหมือนกัน แต่ไม่มีการสร้างรหัสใด ๆ บังคับให้นักพัฒนาเขียนรหัสเพิ่มเติมและกีดกันการตรวจหาข้อผิดพลาดในการคอมไพล์เวลา
18 c#  .net  winrt 

4
การติดตาเป็นภาษาที่ใช้งานได้จริงเพียงใด?
รูปแบบของการใช้ตัวจัดการคำสั่งในการจัดการกับการคงอยู่ของภาษาที่ใช้งานได้อย่างแท้จริงซึ่งเราต้องการทำให้โค้ดที่เกี่ยวข้องกับ IO มีความบางที่สุด เมื่อใช้การออกแบบที่ขับเคลื่อนด้วยโดเมนในภาษาเชิงวัตถุเป็นเรื่องปกติที่จะใช้รูปแบบคำสั่ง / ตัวจัดการเพื่อดำเนินการเปลี่ยนแปลงสถานะ ในการออกแบบตัวจัดการคำสั่งจะอยู่ด้านบนของวัตถุโดเมนของคุณและรับผิดชอบต่อตรรกะที่เกี่ยวข้องกับการคงอยู่ที่น่าเบื่อเช่นการใช้ที่เก็บข้อมูลและการเผยแพร่กิจกรรมโดเมน ตัวจัดการเป็นหน้าสาธารณะของโมเดลโดเมนของคุณ รหัสแอปพลิเคชันเช่น UI เรียกตัวจัดการเมื่อจำเป็นต้องเปลี่ยนสถานะของวัตถุโดเมน ร่างใน C #: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.