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

อินเทอร์เฟซหมายถึงจุดที่กำหนดของการโต้ตอบกับส่วนประกอบ ส่วนต่อประสานสามารถใช้งานได้ทั้งระดับฮาร์ดแวร์และซอฟต์แวร์ --- นอกจากนี้ยังอ้างถึงองค์ประกอบภาษา `interface 'ซึ่งเป็นข้อยกเว้นเพียงอย่างเดียวของการสืบทอดเดี่ยวใน Java, C # และภาษาที่คล้ายกัน

7
เหตุใดคลาสนามธรรมที่ใช้อินเทอร์เฟซจึงพลาดการประกาศ / การใช้งานวิธีใดวิธีหนึ่งของอินเทอร์เฟซ
สิ่งที่น่าสงสัยเกิดขึ้นใน Java เมื่อคุณใช้คลาสนามธรรมเพื่อใช้อินเทอร์เฟซ: วิธีการบางอย่างของอินเทอร์เฟซอาจหายไปโดยสิ้นเชิง (เช่นไม่มีการประกาศนามธรรมหรือการนำไปใช้จริง) แต่คอมไพเลอร์ไม่บ่น ตัวอย่างเช่นให้อินเทอร์เฟซ: public interface IAnything { void m1(); void m2(); void m3(); } คลาสนามธรรมต่อไปนี้ได้รับการรวบรวมอย่างสนุกสนานโดยไม่มีคำเตือนหรือข้อผิดพลาด: public abstract class AbstractThing implements IAnything { public void m1() {} public void m3() {} } คุณอธิบายได้ไหมว่าทำไม?

11
ทำไมต้องใช้อินเทอร์เฟซอย่างชัดเจน?
ดังนั้นกรณีการใช้งานที่ดีสำหรับการใช้งานอินเทอร์เฟซอย่างชัดเจนคืออะไร? เป็นเพียงเพื่อให้คนที่ใช้คลาสไม่ต้องดูวิธีการ / คุณสมบัติทั้งหมดใน Intellisense?
122 c#  interface 

12
วิธีการเสริมใน Java Interface
จากความเข้าใจของฉันถ้าคุณใช้อินเทอร์เฟซใน java เมธอดที่ระบุในอินเทอร์เฟซนั้นจะต้องถูกใช้โดยคลาสย่อยที่ใช้อินเทอร์เฟซดังกล่าว ฉันสังเกตเห็นว่าในอินเทอร์เฟซบางอย่างเช่นอินเทอร์เฟซคอลเลคชันมีวิธีการที่แสดงความคิดเห็นว่าเป็นทางเลือก แต่สิ่งนี้หมายความว่าอย่างไร มันโยนฉันเล็กน้อยเพราะฉันคิดว่าจะต้องใช้วิธีการทั้งหมดที่ระบุในอินเทอร์เฟซ?
120 java  methods  interface 

16
อะไรคือความแตกต่างระหว่างอินเทอร์เฟซและคลาสและทำไมฉันจึงควรใช้อินเทอร์เฟซเมื่อฉันสามารถใช้วิธีการโดยตรงในคลาสได้
ฉันรู้ว่านี่เป็นคำถามพื้นฐานมาก แต่ผู้สัมภาษณ์ถามฉันด้วยวิธีที่หลอกลวงมากและฉันก็ทำอะไรไม่ถูก :( ฉันรู้เฉพาะเนื้อหาหรือคำจำกัดความทางทฤษฎีสำหรับอินเทอร์เฟซและยังนำไปใช้ในหลายโครงการที่ฉันทำ แต่ฉันไม่เข้าใจจริงๆว่าทำไมสิ่งนี้ถึงมีประโยชน์ ฉันยังไม่เข้าใจสิ่งหนึ่งในอินเทอร์เฟซ เช่นเราใช้ conn.Dispose();ในที่สุดบล็อก แต่ฉันไม่เห็นว่าคลาสนั้นกำลังใช้หรือสืบทอดIDisposableอินเทอร์เฟซ ( SqlConnection) คลาสที่ฉันหมายถึง ฉันสงสัยว่าฉันจะเรียกชื่อเมธอดได้อย่างไร ในสิ่งเดียวกันฉันไม่เข้าใจว่าวิธีการกำจัดทำงานอย่างไรเพราะเราจำเป็นต้องใช้เนื้อความของฟังก์ชันด้วยการใช้งานของเราเองสำหรับวิธีการอินเทอร์เฟซทั้งหมด แล้วอินเตอร์เฟสได้รับการยอมรับหรือตั้งชื่อเป็นสัญญาอย่างไร? คำถามเหล่านี้ยังคงวนเวียนอยู่ในใจของฉันจนถึงตอนนี้และตรงไปตรงมาฉันไม่เคยเห็นกระทู้ดีๆที่จะอธิบายคำถามของฉันในแบบที่ฉันเข้าใจได้ MSDN ตามปกติดูน่ากลัวมากและไม่มีบรรทัดเดียวชัดเจนที่นั่น (ผู้คนขอแก้ตัวด้วยความกรุณาที่อยู่ในการพัฒนาระดับสูงฉันรู้สึกเป็นอย่างยิ่งว่ารหัสหรือบทความใด ๆ ควรเข้าถึงจิตใจของทุกคนที่เห็นดังนั้นจึงเหมือนกับที่คนอื่น ๆ พูดกัน MSDN ไม่ได้ใช้งาน ) ผู้สัมภาษณ์กล่าวว่า: เขามี 5 วิธีและเขายินดีที่จะนำไปใช้ในคลาสโดยตรง แต่ถ้าคุณต้องไปคลาส Abstract หรืออินเทอร์เฟซคุณจะเลือกวิธีใดและเพราะเหตุใด ฉันตอบเขาทุกเรื่องที่ฉันอ่านในบล็อกต่างๆว่าได้เปรียบและเสียเปรียบทั้งคลาสนามธรรมและอินเทอร์เฟซ แต่เขาไม่มั่นใจเขาพยายามเข้าใจ "Why Interface" โดยทั่วไป "ทำไมต้องเป็นคลาสนามธรรม" โดยทั่วไปแม้ว่าฉันจะสามารถใช้วิธีการเดียวกันได้เพียงครั้งเดียวและไม่สามารถเปลี่ยนแปลงได้ ฉันไม่เห็นที่ไหนในเน็ตฉันสามารถหาบทความที่จะอธิบายฉันอย่างชัดเจนเกี่ยวกับอินเทอร์เฟซและการทำงานของมัน ฉันเป็นหนึ่งในโปรแกรมเมอร์หลายคนที่ยังไม่รู้เกี่ยวกับอินเทอร์เฟซ (ฉันรู้ทฤษฎีและวิธีการที่ฉันใช้) แต่ไม่พอใจที่ฉันเข้าใจมันอย่างชัดเจน
118 c#  class  oop  interface  abstraction 

4
สืบทอดมาจากคลาสพื้นฐานทั่วไปใช้ข้อ จำกัด และใช้อินเทอร์เฟซใน C #
นี่คือคำถามเกี่ยวกับไวยากรณ์ ฉันมีคลาสทั่วไปที่สืบทอดมาจากคลาสพื้นฐานทั่วไปและกำลังใช้ข้อ จำกัด กับพารามิเตอร์ชนิดหนึ่ง ฉันยังต้องการให้คลาสที่ได้รับมาใช้อินเทอร์เฟซ สำหรับชีวิตของฉันดูเหมือนว่าฉันไม่สามารถเข้าใจไวยากรณ์ที่ถูกต้องได้ นี่คือสิ่งที่ฉันมี: DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... } สิ่งแรกที่นึกถึงคือ: DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... } แต่นั่นไม่ถูกต้องเนื่องจากทำให้ T2 จำเป็นต้องใช้ทั้ง IBar และ IFoo ไม่ใช่ DerivedFoo เพื่อใช้ IFoo ฉันได้ลองใช้ Googling ใช้เครื่องหมายทวิภาคอัฒภาค ฯลฯ แล้ว แต่กลับสั้นลง ฉันแน่ใจว่าคำตอบนั้นง่ายมาก

2
“ <type> เป็นตัวชี้ไปที่อินเทอร์เฟซไม่ใช่อินเทอร์เฟซ” เกิดความสับสน
เรียนเพื่อนนักพัฒนา ฉันมีปัญหานี้ซึ่งดูเหมือนจะแปลกสำหรับฉัน ดูตัวอย่างโค้ดนี้: package coreinterfaces type FilterInterface interface { Filter(s *string) bool } type FieldFilter struct { Key string Val string } func (ff *FieldFilter) Filter(s *string) bool { // Some code } type FilterMapInterface interface { AddFilter(f *FilterInterface) uuid.UUID RemoveFilter(i uuid.UUID) GetFilterByID(i uuid.UUID) *FilterInterface } type FilterMap struct { …
117 pointers  go  interface 

10
อินเตอร์เฟสของ Java และคลาสประเภทของ Haskell: ความแตกต่างและความคล้ายคลึงกัน?
ในขณะที่ฉันเรียนรู้ Haskell ฉันสังเกตเห็นประเภทของคลาสซึ่งน่าจะเป็นสิ่งประดิษฐ์ที่ยอดเยี่ยมที่มีต้นกำเนิดจาก Haskell อย่างไรก็ตามในหน้า Wikipedia ในประเภทคลาส : โปรแกรมเมอร์กำหนดคลาสประเภทโดยการระบุชุดของฟังก์ชันหรือชื่อคงที่พร้อมกับประเภทที่เกี่ยวข้องซึ่งต้องมีอยู่สำหรับทุกประเภทที่เป็นของคลาส ซึ่งดูเหมือนจะค่อนข้างใกล้เคียงกับอินเทอร์เฟซของ Java สำหรับฉัน (อ้างถึงหน้าอินเทอร์เฟซ (Java) ของ Wikipedia ): อินเทอร์เฟซในภาษาโปรแกรม Java เป็นประเภทนามธรรมที่ใช้เพื่อระบุส่วนต่อประสาน (ในความหมายทั่วไปของคำศัพท์) ที่คลาสต้องใช้ สองสิ่งนี้ดูค่อนข้างคล้ายกัน: คลาสประเภท จำกัด พฤติกรรมของประเภทในขณะที่อินเทอร์เฟซ จำกัด พฤติกรรมของคลาส ฉันสงสัยว่าความแตกต่างและความคล้ายคลึงกันระหว่างประเภทคลาสใน Haskell และอินเทอร์เฟซใน Java คืออะไรหรืออาจแตกต่างกันโดยพื้นฐาน แก้ไข:ผมสังเกตเห็นแม้ยอมรับ haskell.org ว่าพวกเขามีความคล้ายคลึงกัน ถ้าพวกมันคล้ายกันมาก (หรือพวกมัน?) แล้วทำไม type class ถึงได้รับการยกย่องเช่นนี้? แก้ไขเพิ่มเติม:ว้าวคำตอบที่ยอดเยี่ยมมากมาย! ฉันเดาว่าฉันจะต้องปล่อยให้ชุมชนตัดสินใจว่าอันไหนดีที่สุด อย่างไรก็ตามในขณะที่อ่านคำตอบทั้งหมดของพวกเขาดูเหมือนจะเป็นเพียงแค่บอกว่า"มีหลายสิ่ง typeclass สามารถทำในขณะที่อินเตอร์เฟซที่ไม่สามารถหรือต้องรับมือกับข้อมูลทั่วไป" ฉันอดไม่ได้ที่จะสงสัยว่ามีอินเทอร์เฟซใดบ้างที่สามารถทำได้ในขณะที่แว่นตาพิมพ์ไม่สามารถทำได้ นอกจากนี้ฉันสังเกตเห็นว่า Wikipedia …



5
มีวิธีสร้างอินเทอร์เฟซใน ES6 / Node 4 หรือไม่?
ES6 มีให้ใช้งานอย่างสมบูรณ์ในโหนด 4 ฉันสงสัยว่ามันมีแนวคิดของอินเทอร์เฟซเพื่อกำหนดสัญญาวิธีการMyClass implements MyInterfaceหรือไม่ ฉันหาข้อมูลเกี่ยวกับ Googling ไม่ได้มากนัก แต่อาจมีเคล็ดลับหรือวิธีแก้ปัญหาที่ดี

7
ควรเพิ่มข้อคิดเห็น Javadoc ในการใช้งานหรือไม่?
วิธีปฏิบัติที่ถูกต้องในการเพิ่มความคิดเห็น Javadoc ในอินเทอร์เฟซและเพิ่มความคิดเห็นที่ไม่ใช่ Javadoc ในการนำไปใช้งานหรือไม่? IDE ส่วนใหญ่สร้างข้อคิดเห็นที่ไม่ใช่ JavaDoc สำหรับการใช้งานเมื่อคุณสร้างข้อคิดเห็นโดยอัตโนมัติ วิธีคอนกรีตควรมีคำอธิบายไม่ใช่หรือ?

6
เหตุใดวิธีการเชื่อมต่อ C # จึงไม่ประกาศว่าเป็นนามธรรมหรือเสมือน
วิธีการ C # ในอินเทอร์เฟซถูกประกาศโดยไม่ใช้virtualคีย์เวิร์ดและแทนที่ในคลาสที่ได้รับโดยไม่ต้องใช้overrideคีย์เวิร์ด มีเหตุผลนี้หรือไม่? ฉันคิดว่ามันเป็นเพียงความสะดวกทางภาษาและเห็นได้ชัดว่า CLR รู้วิธีจัดการสิ่งนี้ภายใต้ฝาครอบ (วิธีการไม่ใช่เสมือนตามค่าเริ่มต้น) แต่มีเหตุผลทางเทคนิคอื่น ๆ หรือไม่? นี่คือ IL ที่คลาสที่ได้รับสร้างขึ้น: class Example : IDisposable { public void Dispose() { } } .method public hidebysig newslot virtual final instance void Dispose() cil managed { // Code size 2 (0x2) .maxstack 8 IL_0000: nop IL_0001: ret } …

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

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

10
ส่วนต่อประสาน Java เทียบเท่ากับอะไรใน Ruby?
เราสามารถเปิดเผยอินเทอร์เฟซใน Ruby เหมือนกับที่เราทำใน java และบังคับใช้โมดูลหรือคลาส Ruby เพื่อใช้วิธีการที่กำหนดโดยอินเตอร์เฟส วิธีหนึ่งคือใช้การถ่ายทอดทางพันธุกรรมและ method_missing เพื่อให้ได้ผลเช่นเดียวกัน แต่มีแนวทางอื่นที่เหมาะสมกว่านี้หรือไม่
106 ruby  interface 

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