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

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

4
แผนการตั้งชื่อใดสำหรับไฟล์ C # ที่มีหลายคลาส
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ในโครงการ C # เรามักจะจัดกลุ่มคลาสที่เล็กและสัมพันธ์อย่างแน่นหนาไว้ใน.csไฟล์เดียวกัน การปฏิบัตินี้ช่วยลดความไม่ลงรอยกันของการจัดการกับไฟล์จำนวนมากที่มีรหัสใกล้เคียงกับไม่มีรหัสจริง ยังมีวิธีปฏิบัติที่กำหนดขึ้นเพื่อตั้งชื่อไฟล์ที่มีหลายคลาสหรือไม่?
20 c#  .net 

3
การออกแบบที่ดีที่สุดสำหรับรูปแบบ Windows ที่จะแบ่งปันฟังก์ชั่นทั่วไป
ในอดีตที่ผ่านมาฉันเคยใช้การสืบทอดเพื่อให้สามารถขยายแบบฟอร์ม Windows ในแอปพลิเคชันของฉันได้ ถ้าแบบฟอร์มทั้งหมดของฉันมีตัวควบคุมงานศิลปะและฟังก์ชันการทำงานร่วมกันฉันจะสร้างแบบฟอร์มพื้นฐานที่ใช้ตัวควบคุมและฟังก์ชันการทำงานทั่วไปแล้วอนุญาตให้ตัวควบคุมอื่นสืบทอดจากแบบฟอร์มพื้นฐานนั้น อย่างไรก็ตามฉันพบปัญหาเล็กน้อยเกี่ยวกับการออกแบบ การควบคุมสามารถอยู่ในภาชนะหนึ่งครั้งเท่านั้นดังนั้นการควบคุมแบบคงที่ใด ๆ ที่คุณมีจะยุ่งยาก ตัวอย่างเช่นสมมติว่าคุณมีรูปแบบพื้นฐานที่เรียกว่า BaseForm ซึ่งมี TreeView ซึ่งคุณได้รับการป้องกันและคงที่เพื่อให้อินสแตนซ์อื่น ๆ (ที่ได้รับ) ของคลาสนี้ทั้งหมดสามารถแก้ไขและแสดง TreeView เดียวกันได้ สิ่งนี้จะไม่ทำงานสำหรับหลาย ๆ คลาสที่สืบทอดมาจาก BaseForm เนื่องจาก TreeView นั้นสามารถอยู่ในหนึ่งคอนเทนเนอร์ในแต่ละครั้งเท่านั้น มันน่าจะเป็นในรูปแบบสุดท้ายที่เริ่มต้น แม้ว่าทุกอินสแตนซ์สามารถแก้ไขการควบคุมได้ แต่จะแสดงในเวลาเดียวเท่านั้น แน่นอนว่ามีการแก้ไข แต่พวกมันน่าเกลียด (นี่ดูเหมือนจะเป็นการออกแบบที่แย่มากสำหรับฉันทำไมภาชนะบรรจุหลาย ๆ อันไม่สามารถเก็บพอยน์เตอร์ไปยังวัตถุเดียวกันได้อย่างไรก็ตามมันเป็นอย่างนั้น) สถานะระหว่างฟอร์มนั่นคือปุ่มสถานะข้อความป้ายกำกับ ฯลฯ ฉันต้องใช้ตัวแปรโกลบอลสำหรับและรีเซ็ตสถานะบนโหลด สิ่งนี้ไม่ได้รับการสนับสนุนโดยนักออกแบบของ Visual Studio เป็นอย่างดี มีการออกแบบที่ดีกว่า แต่ยังคงไว้ซึ่งการบำรุงรักษาที่ใช้ง่ายหรือไม่? หรือรูปแบบการสืบทอดยังคงเป็นวิธีที่ดีที่สุด? อัปเดต ฉันเปลี่ยนจากการดู MVC เป็น MVP เป็นรูปแบบการสังเกตการณ์เป็นรูปแบบกิจกรรม นี่คือสิ่งที่ฉันกำลังคิดอยู่ในขณะนี้โปรดวิจารณ์: …

2
การสร้างคลาสแบบไดนามิกจากชนิดที่ถูกดึงข้อมูลขณะรันไทม์
เป็นไปได้ไหมที่จะทำสิ่งต่อไปนี้ใน C # (หรือในภาษาอื่น ๆ )? ฉันกำลังดึงข้อมูลจากฐานข้อมูล ณ รันไทม์ฉันสามารถคำนวณจำนวนคอลัมน์และชนิดข้อมูลของคอลัมน์ที่ดึงมา ต่อไปฉันต้องการ "สร้าง" คลาสที่มีชนิดข้อมูลเหล่านี้เป็นฟิลด์ ฉันต้องการเก็บบันทึกทั้งหมดที่ฉันได้รับในคอลเลกชัน ปัญหาคือฉันต้องการทำทั้งขั้นตอนที่1และ2ที่ runtime เป็นไปได้ไหม ตอนนี้ฉันใช้ C # แต่ฉันสามารถเปลี่ยนไปใช้อย่างอื่นได้ถ้าต้องการ

3
c # เป็นภาษาแบบหลายแพลตฟอร์มจริงหรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา C # (และแพลตฟอร์ม. net โดยทั่วไป) ดูเหมือนว่าจะกลายเป็นตัวเลือกที่ดีในแอปที่กำหนดเป้าหมายหลายตัว: กรอบอย่างเป็นทางการของ MS. net: การพัฒนาแบบเต็มรูปแบบของ windows blow, asp.net dev, Windows phone Dev และอื่น ๆ โมโนและทุกส่วนที่เกี่ยวข้อง: monotouch, monodroid: ส่วนที่เหลือของโลก เครื่องมือนี้เป็น RTM วันนี้ หมายความว่า C # กลายเป็นภาษาที่ดีสำหรับการกำหนดเป้าหมายแพลตฟอร์มยอดนิยม: เดสก์ท็อปเว็บและอุปกรณ์เคลื่อนที่หรือไม่ มันยังดีกว่าถ้าใช้ภาษา "ดั้งเดิม" ของแพลตฟอร์มเป้าหมาย (วัตถุประสงค์ C, Java และอื่น ๆ …
20 c#  mono  monodroid 

7
โปรแกรมเมอร์จัดการกับการพัฒนาซอฟต์แวร์ระดับต่ำในภาษาระดับสูงได้อย่างไร
ฉันค่อนข้างใหม่ในการเขียนโปรแกรมและวิธีที่ดีที่สุดที่ฉันสามารถถามคำถามนี้คือตัวอย่าง ฉันรู้วิธีการทำสิ่งพื้นฐานใน Java และ C # สิ่งต่าง ๆ เช่นหน้าต่างขนาดเล็กในรูปแบบแอปพลิเคชันหรือสร้างคลาสทั่วไป โดยพื้นฐานแล้วฉันได้เรียนรู้และยังไม่ได้พยายามทำอะไรที่ยิ่งใหญ่เลย อย่างไรก็ตามฉันมักจะสงสัยเกี่ยวกับวิธีการทำสิ่งต่าง ๆ ภายใต้ประทุนฉันคิดว่าคุณสามารถพูดได้ ฉันรู้ว่ามันถูกต้มลงไปที่ 1s และ 0s และภาษาแอสเซมบลีนั้นโดยทั่วไปให้คำสั่งกับรูปแบบของ 1s และ 0s แต่ดูเหมือนว่ามันมีการกระโดดจากที่นี่ไปที่: ใช้ห้องสมุดสำหรับห้องสมุดนี้ สำหรับฉันดูเหมือนว่าทุกคนสามารถทำได้โดยไม่ต้องมีห้องสมุดเป็นเลขคณิตและเลขฐานสอง ในการรับอินพุตหรือเอาต์พุตคุณใช้ไลบรารีและอื่น ๆ ... ฉันรู้ว่าคำถามนี้อาจดูเหมือนชัดเจนสำหรับบางคนและฉันรู้ว่าฉันต้องเรียนรู้มากมาย แต่ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มต้นด้วยคำถามเช่นนี้ ขอขอบคุณ. ดังนั้นคำถามของฉันคือ: หากมีใครบางคนกำลังสร้างเครื่องเสมือนหรือ Playstation emulator หรือระบบปฏิบัติการหรือไดรเวอร์หรือเพิ่มการรองรับ mp3 ลงในเครื่องเล่นสื่อหรือสร้างประเภทไฟล์ของคุณเอง ฯลฯ ได้อย่างไร ฉันไม่เห็นวิธีที่จะทำกับ C # หรือ Java กล่าวอีกนัยหนึ่งถ้าฉันอ่านหนังสืออย่าง Professional C # โดย WROX …

4
Delphi vs C # สำหรับการเขียนโปรแกรม GUI [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันมาจากพื้นหลัง PHP และ Python ที่มีความรู้น้อยเกี่ยวกับ C ฉันได้ทำแอพพลิเคชั่นบนเว็บมากมายตอนนี้ฉันกำลังคิดถึงแอพพลิเคชั่น Desktop สำหรับแพลตฟอร์ม windows เพื่อนบอกให้ฉันไปหา Delphi และคนอื่นบอกว่า C # นั้นดีที่สุดแล้วสิ่งที่ฉันกำลังมองหาคือ ความง่าย ผลผลิต เอกสาร API ที่ดี ความเร็ว ลากแล้ววาง Multi เธรด & Good Network API ขอบคุณ
20 c#  delphi 

3
ไม่ทำให้สมาชิกสาธารณะเสมือนหรือเป็นนามธรรม - จริงเหรอ?
ย้อนกลับไปในยุค 2000 เพื่อนร่วมงานคนหนึ่งของฉันบอกฉันว่ามันเป็นรูปแบบการต่อต้านเพื่อทำให้วิธีการสาธารณะเสมือนหรือนามธรรม ตัวอย่างเช่นเขาถือว่าคลาสเช่นนี้ไม่ได้ออกแบบมาอย่างดี: public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation } } เขากล่าวว่า นักพัฒนาของคลาสที่ได้รับที่ใช้Method1และการแทนที่Method2มีการทำซ้ำการตรวจสอบอาร์กิวเมนต์ ในกรณีที่ผู้พัฒนาคลาสพื้นฐานตัดสินใจที่จะเพิ่มบางสิ่งรอบ ๆ ส่วนที่กำหนดเองได้Method1หรือMethod2ใหม่กว่าเขาจะไม่สามารถทำได้ เพื่อนร่วมงานของฉันเสนอวิธีการนี้แทน: public abstract class ProtectedAbstractOrVirtual { public void Method1(string argument) { if (argument …

7
ความแตกต่างระหว่างรูปแบบและหลักการ
รูปแบบการออกแบบเชิงวัตถุและหลักการต่างกันอย่างไร พวกเขาต่างกันไหม? เท่าที่ฉันเข้าใจพวกเขาทั้งสองพยายามบรรลุเป้าหมายร่วมกัน (เช่นความยืดหยุ่น) ดังนั้นฉันสามารถพูดได้ว่ารูปแบบเป็นหลักการและในทางกลับกัน? หลักการออกแบบ = SOLID (เช่นหลักการผกผันของการพึ่งพา) รูปแบบการออกแบบ = Gof (เช่นรูปแบบนามธรรมของโรงงาน)

1
ทำสำเนาเอกสารเกี่ยวกับการใช้งานอินเตอร์เฟส / แทนที่ดีหรือไม่ดี?
ดังนั้นเราจึงมีส่วนต่อประสานเช่นนั้น /// <summary> /// Interface for classes capable of creating foos /// </summary> public interface ICreatesFoo { /// <summary> /// Creates foos /// </summary> void Create(Foo foo); /// <summary> /// Does Bar stuff /// </summary> void Bar(); } เมื่อเร็ว ๆ นี้เราได้เล่นเรื่องเอกสารที่เกี่ยวข้องกับการสร้างและตรวจสอบให้แน่ใจว่ามีเอกสาร XML มากมายดังกล่าวข้างต้น สิ่งนี้ทำให้เกิดเอกสารซ้ำซ้อนมากมาย ตัวอย่างการนำไปใช้: /// <summary> /// A Foo …

3
ฉันจะให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อยกเว้นได้อย่างไร
ทุกครั้งที่ฉันต้องการให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อยกเว้นที่ฉันสงสัยว่าวิธีใดเป็นวิธีที่ถูกต้องในการทำสิ่งนี้ เพื่อประโยชน์ของคำถามนี้ฉันได้เขียนตัวอย่าง สมมติว่ามีคลาสที่เราต้องการอัพเดตAbbreviationคุณสมบัติ จากมุมมองของโซลิดมันอาจจะไม่สมบูรณ์แบบ แต่แม้ว่าเราจะผ่านวิธีปฏิบัติงานผ่าน DI ด้วยบริการบางอย่างสถานการณ์เดียวกันก็จะเกิดขึ้น - มีข้อยกเว้นเกิดขึ้นและไม่มีบริบทใด ๆ เกิดขึ้น กลับไปที่ตัวอย่าง ... class Person { public int Id { get; set; } public string Name { get; set; } public string Abbreviation { get; set; } } จากนั้นมีอินสแตนซ์ของคลาสและลูปที่เรียกเมธอดของผู้ปฏิบัติงาน StringTooShortExceptionมันสามารถโยน var persons = { new Person { Id = 1, …
20 c#  exceptions 

3
สิ่งห่อหุ้มควรเปรียบเทียบให้เท่ากันโดยใช้ตัวดำเนินการ == เมื่อทำการล้อมวัตถุเดียวกันหรือไม่?
ฉันกำลังเขียน wrapper สำหรับองค์ประกอบ XML ที่ช่วยให้นักพัฒนาสามารถวิเคราะห์แอตทริบิวต์จาก XML ได้อย่างง่ายดาย เสื้อคลุมไม่มีสถานะอื่นนอกจากวัตถุที่ถูกห่อ ฉันกำลังพิจารณาการติดตั้งต่อไปนี้ (ทำให้ง่ายขึ้นสำหรับตัวอย่างนี้) ซึ่งรวมถึงโอเวอร์โหลดสำหรับ==โอเปอเรเตอร์ class XmlWrapper { protected readonly XElement _element; public XmlWrapper(XElement element) { _element = element; } public string NameAttribute { get { //Get the value of the name attribute } set { //Set the value of the name attribute } …
19 c#  .net  operators 

8
มีวิธีที่ดีกว่าในการใช้พจนานุกรม C # มากกว่า TryGetValue หรือไม่
ฉันพบว่าตัวเองมักจะค้นหาคำถามออนไลน์และวิธีแก้ปัญหาหลายอย่างรวมถึงพจนานุกรม อย่างไรก็ตามเมื่อใดก็ตามที่ฉันพยายามที่จะใช้พวกเขาฉันได้กลิ่นที่น่ากลัวนี้ในรหัสของฉัน เช่นทุกครั้งที่ฉันต้องการใช้ค่า: int x; if (dict.TryGetValue("key", out x)) { DoSomethingWith(x); } นั่นคือโค้ด 4 บรรทัดที่จะทำสิ่งต่อไปนี้: DoSomethingWith(dict["key"]) ฉันได้ยินมาว่าการใช้คีย์เวิร์ด out เป็นรูปแบบการต่อต้านเพราะทำให้ฟังก์ชั่นกลายพันธุ์พารามิเตอร์ของพวกเขา นอกจากนี้ฉันพบว่าตัวเองมักต้องการพจนานุกรม "กลับด้าน" ที่ฉันพลิกคีย์และค่าต่างๆ ในทำนองเดียวกันฉันมักจะทำซ้ำผ่านรายการในพจนานุกรมและพบว่าตนเองกำลังแปลงคีย์หรือค่าไปยังรายการ ฯลฯ เพื่อทำสิ่งนี้ให้ดีขึ้น ฉันรู้สึกว่ามีวิธีการใช้พจนานุกรมที่ดีกว่าและสง่างามกว่าอยู่เกือบตลอดเวลา แต่ฉันรู้สึกแย่

8
C # - เหตุใดคำนำหน้าบนฟิลด์จึงหมดกำลังใจ?
ย้อนกลับไปในสมัยก่อนเราทำสัญลักษณ์ของฮังการี นั่นคือตอนนี้ถือว่าเป็นกุญแจและส่วนใหญ่ฉันจะไม่ใช้อีกต่อไป แต่ฉันยังพบว่ามีการใช้m_คำนำหน้าเพื่อระบุเขตข้อมูลสมาชิก สำหรับฉันถ้าฉันอ่านรหัสของคนอื่นและฉันเห็นสิ่งนี้: count = 3; ฉันคิดว่าcountมันเป็นตัวแปรท้องถิ่นของฟังก์ชั่นนั้นและฉันกำลังทำสิ่งที่จะใช้ที่อื่นในฟังก์ชั่น; ถ้าฉันเห็นสิ่งนี้: m_count = 3; ฉันรู้ทันทีว่าฉันกำลังอัพเดทสถานะของวัตถุ แนวทางสไตล์ Microsoft บอกว่าเป็นวิธีที่ผิดในการทำสิ่งต่าง ๆ ฉันควรตั้งชื่อฟิลด์ที่ไม่ใช่แบบสาธารณะเหมือนกับตัวแปรชั่วคราวที่กำหนดไว้ในฟังก์ชัน ไม่มีm_ไม่ได้ขีดง่าย ใช่เราสามารถกำหนดรูปแบบการเขียนโค้ดของเราเอง แต่จากนั้นฉันต้องต่อสู้กับเครื่องมือวิเคราะห์รหัสแบบคงที่ต่างๆ ฉันยินดีที่จะเปลี่ยนเป็นสไตล์ Microsoft แต่ฉันอยากรู้ว่าทำไมสิ่งต่าง ๆ ถึงเป็นแบบนี้ ทำไมตอนนี้จึงถือว่าไม่ดีที่จะบอกได้ว่าตัวแปรเป็นฟังก์ชันโลคัลหรือสมาชิก? ป.ล. นี้คล้ายกับแนวทางปฏิบัติที่ดีที่สุดในปัจจุบันที่ได้รับการยอมรับเกี่ยวกับคำสำคัญ“ นี้” ที่อยู่ด้านหน้าของฟิลด์และวิธีการใน c # คืออะไร แต่ฉันถามเกี่ยวกับการm_ไม่ได้this. PPS ดูเพิ่มเติมที่เหตุใด Microsoft จึงสร้างพารามิเตอร์ตัวแปรโลคัลและฟิลด์ส่วนตัวจึงมีหลักการตั้งชื่อเหมือนกัน


2
เมื่อใดที่จะใช้ [บริสุทธิ์] บนตัวสร้าง?
ฉันกำลังเรียนรู้เกี่ยวกับสัญญารหัสใน. NET และฉันพยายามเข้าใจแนวคิดของผู้สร้างที่บริสุทธิ์ สัญญารหัสเอกสารฯ : วิธีการทั้งหมดที่เรียกว่าภายในสัญญาจะต้องบริสุทธิ์ นั่นคือพวกเขาจะต้องไม่ปรับปรุงสถานะก่อนหน้าใด ๆ วิธีบริสุทธิ์ได้รับอนุญาตให้แก้ไขวัตถุที่สร้างขึ้นหลังจากเข้าสู่วิธีบริสุทธิ์ และPureAttributeเอกสารประกอบฯ : บ่งชี้ว่าชนิดหรือเมธอดนั้นบริสุทธิ์นั่นคือมันไม่ได้ทำการเปลี่ยนแปลงสถานะใด ๆ ที่มองเห็นได้ ฉันเข้าใจข้อความเหล่านี้เมื่อพูดถึงวิธีการ แต่สิ่งที่เกี่ยวกับตัวสร้าง สมมติว่าคุณมีชั้นเรียนเช่นนี้: public class Foo { public int Value { get; set; } public Foo(int value) { this.Value = value; } } คอนสตรัคเตอร์นี้เห็นได้ชัดว่ามีผลต่อสถานะของFooวัตถุใหม่แต่ไม่มีผลข้างเคียงอื่น ๆ (เช่นมันไม่ได้ใช้พารามิเตอร์ใด ๆ หรือเรียกวิธีการที่ไม่บริสุทธิ์) เป็นผู้สมัคร[Pure]หรือไม่? อะไรคือความสำคัญของการวางแอ[Pure]ททริบิวต์ลงในคอนสตรัคเตอร์และเมื่อไหร่ที่ฉันควรทำสิ่งนี้ในโค้ดของตัวเอง?

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