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

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

6
หลายคลาสในไฟล์. cs เดียว - ดีหรือไม่ดี [ปิด]
ขอแนะนำให้สร้างหลายคลาสภายในไฟล์. cs หรือควรแต่ละไฟล์. cs มีคลาสแยกต่างหาก ตัวอย่างเช่น: public class Items { public class Animal { } public class Person { } public class Object { } } หลบข้อเท็จจริงที่ว่านี่เป็นตัวอย่างที่ดีของสถาปัตยกรรมที่ดีมีมากกว่าหนึ่งคลาสในไฟล์. cs ที่มีกลิ่นรหัสหรือไม่
30 c#  code-smell 

5
เมื่อใดและเพราะเหตุใดคุณจึงควรใช้ช่องว่าง (แทนเช่น bool / int)
ฉันพบวิธีในบางครั้งที่ผู้พัฒนาเลือกที่จะคืนสิ่งที่ไม่สำคัญกับฟังก์ชั่น ฉันหมายถึงเมื่อดูที่รหัสดูเหมือนว่าจะทำงานได้ดีพอ ๆ กับvoidหลังจากที่ฉันคิดว่า "ทำไม" เสียงนี้คุ้นเคยไหม? บางครั้งผมก็จะเห็นว่าส่วนใหญ่มักจะดีกว่าที่จะกลับมาสิ่งที่ต้องการboolหรือมากกว่าแล้วก็ทำint voidฉันไม่แน่ใจว่าในภาพรวมเกี่ยวกับข้อดีข้อเสีย ขึ้นอยู่กับสถานการณ์การส่งคืนintสามารถทำให้ผู้โทรทราบถึงจำนวนแถวหรือวัตถุที่ได้รับผลกระทบจากวิธีการ (เช่นบันทึก 5 รายการไปยัง MSSQL) หากวิธีการเช่น "InsertSomething" ส่งกลับแบบบูล, ฉันจะมีวิธีการออกแบบมาเพื่อกลับถ้าประสบความสำเร็จอื่นtrue falseผู้เรียกสามารถเลือกที่จะดำเนินการหรือไม่ใช้ข้อมูลนั้น ในทางกลับกัน, มันอาจนำไปสู่วัตถุประสงค์ที่ชัดเจนน้อยลงของวิธีการโทร? การเข้ารหัสที่ไม่ดีมักจะบังคับให้ฉันต้องตรวจสอบเนื้อหาวิธีอีกครั้ง ถ้ามันคืนบางอย่างมันบอกคุณว่าวิธีนั้นเป็นประเภทที่คุณต้องทำอะไรบางอย่างกับผลลัพธ์ที่ส่งคืน ปัญหาอีกประการหนึ่งคือหากคุณไม่รู้จักวิธีการใช้งานผู้พัฒนาตัดสินใจว่าจะส่งคืนสิ่งที่ไม่สำคัญต่อการทำงาน แน่นอนคุณสามารถแสดงความคิดเห็นได้ ค่าส่งคืนจะต้องมีการประมวลผลเมื่อการประมวลผลอาจจะสิ้นสุดที่วงเล็บปิดของวิธีการ เกิดอะไรขึ้นภายใต้ประทุน? วิธีการที่เรียกว่าได้รับfalseเนื่องจากข้อผิดพลาดโยนหรือไม่ หรือมันกลับเท็จเนื่องจากผลการประเมิน? คุณมีประสบการณ์อะไรกับเรื่องนี้? คุณจะทำสิ่งนี้อย่างไร

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

7
วิธีการจัดการข้อยกเว้นที่ไม่สามารถจัดการได้? (ยุติแอปพลิเคชั่น vs. รักษาชีวิต)
แนวปฏิบัติที่ดีที่สุดคืออะไรหากมีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้นในแอปพลิเคชันเดสก์ท็อป ฉันกำลังคิดที่จะแสดงข้อความถึงผู้ใช้เพื่อให้เขาสามารถติดต่อฝ่ายสนับสนุน ฉันจะแนะนำให้ผู้ใช้รีสตาร์ทแอปพลิเคชัน แต่ไม่บังคับ คล้ายกับสิ่งที่กล่าวถึงที่นี่: ux.stackexchange.com - วิธีที่ดีที่สุดในการจัดการข้อผิดพลาดของแอปพลิเคชันคืออะไร โครงการนี้เป็นแอปพลิเคชั่น. NET WPF ดังนั้นข้อเสนอที่อธิบายไว้อาจมีลักษณะเช่นนี้ (โปรดทราบว่านี่เป็นตัวอย่างแบบง่าย ๆ อาจเป็นไปได้ที่จะซ่อนรายละเอียดข้อยกเว้นจนกว่าผู้ใช้จะคลิกที่ "แสดงรายละเอียด" รายงานข้อผิดพลาดได้อย่างง่ายดาย): public partial class App : Application { public App() { DispatcherUnhandledException += OnDispatcherUnhandledException; } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { LogError(e.Exception); MessageBoxResult result = MessageBox.Show( $"Please help us fix it and contact …

6
สร้างวัตถุใหม่หรือรีเซ็ตคุณสมบัติทั้งหมดหรือไม่
public class MyClass { public object Prop1 { get; set; } public object Prop2 { get; set; } public object Prop3 { get; set; } } สมมติว่าผมมีวัตถุmyObjectของMyClassและฉันต้องการที่จะตั้งค่าคุณสมบัติของมันก็จะดีกว่าการสร้างวัตถุใหม่หรือมอบหมายแต่ละคุณสมบัติ? สมมติว่าฉันไม่มีการใช้เพิ่มเติมใด ๆ กับอินสแตนซ์เก่า myObject = new MyClass(); หรือ myObject.Prop1 = null; myObject.Prop2 = null; myObject.Prop3 = null;

4
โอเปอเรเตอร์ที่มีเงื่อนไขแบบใหม่ของ C # 6.0 นั้นผิดกฎหมายหรือไม่?
กฎหมายของ Demeterกล่าวต่อไปนี้: แต่ละหน่วยควรมีความรู้ที่ จำกัด เฉพาะเกี่ยวกับหน่วยอื่น ๆ : เฉพาะหน่วย "อย่างใกล้ชิด" ที่เกี่ยวข้องกับหน่วยปัจจุบัน แต่ละหน่วยควรคุยกับเพื่อนเท่านั้น อย่าคุยกับคนแปลกหน้า พูดคุยกับเพื่อนของคุณทันที C # 6.0 แนะนำผู้ประกอบการใหม่ที่เรียกว่าผู้ประกอบการ null เงื่อนไข IMHO ทำให้การเข้ารหัสง่ายขึ้นและปรับปรุงความสามารถในการอ่าน แต่มันยังทำให้ง่ายต่อการเขียนรหัสคู่มากขึ้นเนื่องจากง่ายต่อการเลื่อนดูฟิลด์คลาสและตรวจสอบค่าว่าง (เช่นvar x = A?.B?.C?.D?.E?.F?) ถูกต้องหรือไม่หากระบุว่าผู้ประกอบการรายใหม่นี้ขัดต่อกฎหมายของ Demeter

5
ทำไม Java / C # ไม่สามารถใช้ RAII ได้
คำถาม: ทำไม Java / C # ไม่สามารถใช้ RAII ได้ ชี้แจง: ฉันรู้ว่าตัวรวบรวมขยะไม่ได้กำหนดไว้ ดังนั้นด้วยคุณสมบัติภาษาปัจจุบันจึงเป็นไปไม่ได้ที่วิธีการกำจัด () ของวัตถุจะถูกเรียกโดยอัตโนมัติเมื่อออกจากขอบเขต แต่สามารถเพิ่มคุณสมบัติพิเศษดังกล่าวได้หรือไม่ ความเข้าใจของฉัน: ฉันรู้สึกว่าการนำไปปฏิบัติของ RAII ต้องเป็นไปตามข้อกำหนดสองประการ: 1. อายุการใช้งานของทรัพยากรจะต้องอยู่ในขอบเขต 2. โดยปริยาย การเพิ่มทรัพยากรต้องเกิดขึ้นโดยไม่มีคำสั่งอย่างชัดเจนจากโปรแกรมเมอร์ คล้ายกับตัวรวบรวมขยะที่เพิ่มหน่วยความจำโดยไม่ต้องมีคำสั่งที่ชัดเจน "implicitness" จะต้องเกิดขึ้นเมื่อใช้งานในชั้นเรียนเท่านั้น แน่นอนว่าผู้สร้างไลบรารีคลาสต้องใช้เมธอด destructor หรือ Dispose () อย่างชัดเจน Java / C # พอใจจุดที่ 1 ใน C # ทรัพยากรการใช้ IDisposable สามารถถูกผูกไว้กับขอบเขต "using": void test() { using(Resource …

11
การประกาศอินเตอร์เฟสในไฟล์เดียวกับคลาสพื้นฐานมันเป็นการปฏิบัติที่ดีหรือไม่?
เพื่อให้สามารถเปลี่ยนได้และทดสอบได้ปกติบริการที่มีตรรกะต้องมีส่วนต่อประสานเช่น public class FooService: IFooService { ... } การออกแบบที่ชาญฉลาดฉันเห็นด้วยกับสิ่งนี้ แต่หนึ่งในสิ่งที่รบกวนฉันด้วยวิธีนี้คือสำหรับบริการเดียวคุณจะต้องประกาศสองสิ่ง (คลาสและส่วนต่อประสาน) และในทีมของเราโดยปกติสองไฟล์ (หนึ่งไฟล์ สำหรับคลาสและอีกอันสำหรับอินเตอร์เฟส) ความไม่สะดวกสบายอีกประการคือความยากลำบากในการนำทางเนื่องจากการใช้ "ไปที่คำจำกัดความ" ใน IDE (VS2010) จะชี้ไปที่อินเทอร์เฟซ (เนื่องจากคลาสอื่นอ้างอิงถึงอินเทอร์เฟซ) ไม่ใช่คลาสจริง ฉันคิดว่าการเขียน IFooService ในไฟล์เดียวกับ FooService จะลดความแปลกประหลาดข้างต้น ท้ายที่สุด IFooService และ FooService มีความเกี่ยวข้องกันมาก นี่เป็นวิธีปฏิบัติที่ดีหรือไม่? มีเหตุผลที่ดีที่ IFooService จะต้องอยู่ในไฟล์ของตัวเองหรือไม่?

6
การทดสอบหน่วยที่ควรคาดว่าผลลัพธ์จะ hardcoded?
ผลลัพธ์ที่คาดหวังจากการทดสอบหน่วยควรจะ hardcoded หรือพวกเขาสามารถขึ้นอยู่กับตัวแปรเริ่มต้น? ผลที่ได้จากฮาร์ดโค้ดหรือจากการคำนวณเพิ่มความเสี่ยงในการแนะนำข้อผิดพลาดในการทดสอบหน่วยหรือไม่? มีปัจจัยอื่น ๆ ที่ฉันไม่ได้พิจารณาหรือไม่? ตัวอย่างเช่นรูปแบบใดในสองรูปแบบที่เชื่อถือได้มากขึ้น [TestMethod] public void GetPath_Hardcoded() { MyClass target = new MyClass("fields", "that later", "determine", "a folder"); string expected = "C:\\Output Folder\\fields\\that later\\determine\\a folder"; string actual = target.GetPath(); Assert.AreEqual(expected, actual, "GetPath should return a full directory path based on its fields."); } [TestMethod] public …
29 c#  unit-testing 

3
พารามิเตอร์ทางเลือกหรือตัวสร้างที่มากเกินไป
ฉันกำลังดำเนินการDelegateCommandและเมื่อฉันกำลังจะใช้ตัวสร้างฉันจะมาพร้อมกับสองตัวเลือกการออกแบบต่อไปนี้: 1: มีตัวสร้างโอเวอร์โหลดหลายตัว public DelegateCommand(Action<T> execute) : this(execute, null) { } public DelegateCommand(Action<T> execute, Func<T, bool> canExecute) { this.execute = execute; this.canExecute = canExecute; } 2: มีคอนสตรัคเตอร์เดียวเท่านั้นที่มีพารามิเตอร์เป็นตัวเลือก public DelegateCommand(Action<T> execute, Func<T, bool> canExecute = null) { this.execute = execute; this.canExecute = canExecute; } ฉันไม่รู้ว่าจะใช้อันไหนเพราะฉันไม่รู้ว่าข้อดี / ข้อเสียที่เป็นไปได้มาจากวิธีใดวิธีหนึ่งจากสองวิธีที่เสนอ ทั้งสองสามารถถูกเรียกเช่นนี้: var command = …

8
C # Generics - วิธีการหลีกเลี่ยงวิธีการซ้ำซ้อน?
สมมติว่าฉันมีสองคลาสที่มีลักษณะเช่นนี้ (บล็อกแรกของรหัสและปัญหาทั่วไปเกี่ยวข้องกับ C #): class A { public int IntProperty { get; set; } } class B { public int IntProperty { get; set; } } คลาสเหล่านี้ไม่สามารถเปลี่ยนแปลงได้ แต่อย่างใด (เป็นส่วนหนึ่งของการประชุมของบุคคลที่สาม) ดังนั้นฉันไม่สามารถทำให้พวกเขาใช้อินเทอร์เฟซเดียวกันหรือสืบทอดคลาสเดียวกันที่จะมี IntProperty ฉันต้องการใช้ตรรกะบางอย่างกับIntPropertyคุณสมบัติของทั้งสองคลาสและใน C ++ ฉันสามารถใช้คลาสเทมเพลตเพื่อทำสิ่งนั้นได้อย่างง่ายดาย: template <class T> class LogicToBeApplied { public: void T CreateElement(); }; template <class T> T …
28 c#  generics 

6
มีประโยชน์จริง ๆ กับ Repository หรือไม่?
กำลังอ่านบทความบางอย่างเกี่ยวกับข้อดีของการสร้างแหล่งเก็บข้อมูลทั่วไปสำหรับแอปใหม่ ( ตัวอย่าง ) แนวคิดนี้ดูดีเพราะให้ฉันใช้พื้นที่เก็บข้อมูลเดียวกันเพื่อทำสิ่งต่าง ๆ สำหรับเอนทิตีที่แตกต่างกันหลายรายการพร้อมกัน: IRepository repo = new EfRepository(); // Would normally pass through IOC into constructor var c1 = new Country() { Name = "United States", CountryCode = "US" }; var c2 = new Country() { Name = "Canada", CountryCode = "CA" }; var c3 = …

15
ควรที่จะกลับไปมาระหว่างภาษาการเขียนโปรแกรมสองภาษาหรือไม่? [ปิด]
ฉันเขียน PHP ค่อนข้างมากมาเกือบสองปีแล้ว ตอนนี้ฉันกำลังพัฒนา. NET (ส่วนใหญ่ c #) อย่างไรก็ตามบางครั้งฉันกลับไปและทำ php คำถามหลักของฉันคือฉันควรทำสิ่งนี้ต่อไปหรือไม่ฉันควรพัฒนาใน C # ต่อไปหรือไม่? สิ่งนี้จะเป็นอันตรายต่อฉันในระยะยาวหรือไม่ (คุณคิดว่าเป้าหมายหลักของฉันคือการไม่เป็นผู้ค้าขายทุกคน) หรือเป็นวิธีปฏิบัติที่ดีที่จะทำ

4
การสกัดกั้น vs การฉีด: การตัดสินใจด้านสถาปัตยกรรมของกรอบงาน
มีกรอบนี้ที่ฉันช่วยออกแบบ มีงานทั่วไปบางอย่างที่ควรทำโดยใช้ส่วนประกอบทั่วไป ได้แก่ การบันทึกการแคชและการเพิ่มเหตุการณ์โดยเฉพาะ ฉันไม่แน่ใจว่าจะใช้การฉีดแบบพึ่งพาหรือไม่และแนะนำส่วนประกอบเหล่านี้ทั้งหมดให้กับแต่ละบริการ (เช่นคุณสมบัติ) หรือควรฉันมีข้อมูลเมตาบางประเภทที่วางไว้เหนือแต่ละวิธีของบริการของฉันและใช้การสกัดกั้นเพื่อทำงานทั่วไปเหล่านี้ ? นี่คือตัวอย่างของทั้งคู่: ฉีด: public class MyService { public ILoggingService Logger { get; set; } public IEventBroker EventBroker { get; set; } public ICacheService Cache { get; set; } public void DoSomething() { Logger.Log(myMessage); EventBroker.Publish<EventType>(); Cache.Add(myObject); } } และนี่คือรุ่นอื่น ๆ : การสกัดกั้น: public class …

14
มือใหม่ที่กำลังมองหาคำแนะนำในการเขียนโปรแกรมโดยทั่วไป [ปิด]
ต้องการให้บางคนจำย้อนเวลาที่คุณอาจจะเขียนโปรแกรมไม่ดี ... รับงานใหม่ของฉัน (ในฐานะนักพัฒนาซอฟต์แวร์) สักสองสามเดือนแล้วผ่านช่วงทดลองงาน มีประสบการณ์การเขียนโปรแกรมน้อยมาก (C ++ เท่านั้น) และกำลังทำงานกับ asp.net MVC และ Silverlight ดังนั้นจึงมีเว็บไซต์ที่ บริษัท ดำเนินการอยู่และฉันได้เข้าร่วมในความพยายามที่จะทำให้ดีขึ้นขจัดข้อผิดพลาดและอื่น ๆ ปัญหาคือ - เรียนรู้เกี่ยวกับระบบ / เว็บไซต์ที่ทำไปแล้วผ่าน visual studio ฉันมักจะรู้สึกหงุดหงิดอย่างมากไม่เคยรู้เลยว่าควรจะค้นหาส่วนไหนของบรรทัดนี้และโดยทั่วไปแล้วจะมีปัญหามากมายในการรับภาพรวม Visual studio นั้นเป็นสิ่งที่ฉันพบว่ายากที่จะเข้าถึงได้โดยไม่ต้องพึ่งกรอบ asp.net ฉันได้รับความประทับใจว่าเนื่องจากเพื่อนร่วมงานของฉันมีประสบการณ์มากกว่าฉันพวกเขาได้งานที่ดีทั้งหมดและฉันก็เหลือที่จะทำสิ่งที่ไม่ได้แม้แต่การเขียนโปรแกรมราง หมายความว่าพวกเขากำลังเรียนรู้ / สร้างมากขึ้นและฉันกำลังเรียนรู้ / สร้างสิ่งที่ใกล้เคียง ฉันขวัญเสียและกลัวที่จะพูดอะไร ฉันไม่ได้โง่ฉันได้อ่านและฝึกฝนแนวคิดการเขียนโปรแกรมพื้นฐานมากมาย ... ฉันแค่กลัวเลือดกับกรอบการด่านี้ ฉันมองมันและรู้สึกเป็นอัมพาต ผลที่ได้คือฉันถามคำถามที่มีประสบการณ์มากขึ้นเรื่อย ๆ และเขาก็หงุดหงิดและอยากให้งานเขียนโปรแกรมง่าย / ไม่ใช้สติ / ไม่เขียนเพื่อหลีกเลี่ยงการเสียเวลาช่วยฉัน เมื่อฉันไม่เข้าใจบางอย่างฉันลังเลว่าฉันควรถามเขาหรือไม่และพยายามตัดสินใจว่าจะเสียเวลาหรือเปล่า ฉันเป็นคนประเภทที่หยิบสิ่งต่าง …

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