คำถามติดแท็ก static-keyword

10
อย่าใช้“ คงที่” ใน C # หรือ
ฉันส่งใบสมัครที่ฉันเขียนถึงสถาปนิกคนอื่นเพื่อตรวจสอบรหัส หนึ่งในนั้นเกือบจะเขียนฉันทันทีและพูดว่า "อย่าใช้" คงที่ "คุณไม่สามารถเขียนการทดสอบอัตโนมัติด้วยคลาสและวิธีการคงที่" คงที่ "คือการหลีกเลี่ยง" ฉันตรวจสอบและ 1/4 ของชั้นเรียนของฉันถูกทำเครื่องหมายว่า "คงที่" ฉันใช้สแตติกเมื่อฉันจะไม่สร้างอินสแตนซ์ของคลาสเนื่องจากคลาสเป็นคลาสโกลบอลเดี่ยวที่ใช้ตลอดโค้ด เขาพูดถึงบางสิ่งที่เกี่ยวข้องกับการเยาะเย้ยเทคนิค IOC / DI ที่ไม่สามารถใช้กับรหัสคงที่ได้ เขาบอกว่ามันน่าเสียดายที่ห้องสมุดบุคคลที่สามเป็นแบบคงที่เนื่องจากไม่สามารถตรวจสอบได้ สถาปนิกรายนี้ถูกต้องหรือไม่? ปรับปรุง: นี่คือตัวอย่าง: APIManager - คลาสนี้เก็บพจนานุกรมของ API ของบุคคลที่สามที่ฉันกำลังโทรหาพร้อมกับเวลาที่อนุญาตต่อไป มันบังคับใช้ข้อ จำกัด การใช้ API ที่บุคคลที่ 3 จำนวนมากมีอยู่ในเงื่อนไขการให้บริการ ฉันใช้มันทุกที่ที่ฉันกำลังเรียกบริการของบุคคลที่สามโดยเรียก Thread.Sleep (APIManager.GetWait ("ProviderXYZ")); ก่อนโทรออก ทุกอย่างในที่นี้เป็นเธรดที่ปลอดภัยและใช้งานได้ดีกับ TPL ใน C #

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

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

6
ทำความเข้าใจกับคำหลักแบบคงที่
ฉันมีประสบการณ์ในการพัฒนากับ Java, Javascript และ PHP ฉันกำลังอ่าน Microsoft Visual C # 2010 ทีละขั้นตอนซึ่งฉันรู้สึกว่ามันเป็นหนังสือที่ดีมากในการแนะนำคุณกับภาษา C # ฉันดูเหมือนจะมีปัญหาในการทำความเข้าใจคำหลักคงที่ จากสิ่งที่ฉันเข้าใจในตอนนี้ถ้าคลาสถูกประกาศว่าสแตติกวิธีการและตัวแปรทั้งหมดต้องเป็นแบบสแตติก วิธีการหลักเสมอเป็นวิธีการคงที่ดังนั้นในชั้นเรียนที่วิธีการหลักที่มีอยู่ตัวแปรและวิธีการทั้งหมดจะประกาศคงที่ถ้าคุณต้องเรียกพวกเขาในวิธีการหลัก นอกจากนี้ฉันได้สังเกตเห็นว่าในการเรียกวิธีการคงที่จากคลาสอื่นคุณไม่จำเป็นต้องสร้างวัตถุที่คุณสามารถใช้ชื่อคลาส แต่วัตถุประสงค์ที่แท้จริงของคำหลักคงที่คืออะไร เมื่อใดที่ฉันควรประกาศตัวแปรคงที่และวิธีการ?

1
ทำไมจึงไม่มีระบบอำนวยความสะดวกในการโอเวอร์โหลดคุณสมบัติคงที่ใน PHP?
Intro PHP อนุญาตให้คุณโอเวอร์โหลดการเรียกใช้เมธอดและการเข้าถึงคุณสมบัติโดยการประกาศเมธอดมหัศจรรย์ในคลาส สิ่งนี้ทำให้รหัสเช่น: class Foo { public function __get($name) { return 42; } } $foo = new Foo; echo $foo->missingProperty; // prints "42" นอกเหนือจากการบรรทุกเกินพิกัดเช่นคุณสมบัติและวิธีการตั้งแต่ PHP 5.3.0 เรายังสามารถเกินวิธีการโทรออกโดยวิธีการเอาชนะมายากลstatic__callStatic บางสิ่งหายไป สิ่งที่ขาดหายไปจากฟังก์ชั่นที่มีอยู่อย่างชัดเจนคือความสามารถในการโอเวอร์โหลดคุณสมบัติสแตติกเช่น: echo Foo::$missingProperty; // fatal error: access to undeclared static property ข้อ จำกัด นี้เป็นอย่างชัดเจนเอกสาร : การโอเวอร์โหลดของคุณสมบัติใช้งานได้เฉพาะในบริบทของวัตถุ วิธีการเวทย์มนตร์เหล่านี้จะไม่ถูกกระตุ้นในบริบทคงที่ staticดังนั้นวิธีการเหล่านี้ไม่ควรได้รับการประกาศ ในฐานะของ PHP 5.3.0 …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.