Tag: 接口

为什么IEnumerable <T> .ToList <T>()返回List <T>而不是IList <T>?

扩展方法ToList()返回一个List<TSource> 。 ToDictionary()返回一个Dictionary<TKey, TSource> 。 我很好奇为什么这些方法不分别inputIList<TSource>和IDictionary<TKey, TSource>的返回值。 这似乎更奇怪,因为ToLookup<TSource, TKey>其返回值作为接口而不是实际的实现。 使用dotPeek或其他反编译器查看这些扩展方法的来源,我们看到下面的实现(显示ToList()因为它更短): public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) { if (source == null) throw Error.ArgumentNull("source"); return new List<TSource>(source); } 那么为什么这种方法将其返回值作为接口的特定实现而不是接口本身呢? 唯一的变化是返回types。 我很好奇,因为IEnumerable<>扩展名在它们的签名中非常一致,除了这两种情况。 我一直认为这有点奇怪。 另外,为了使事情更令人困惑, ToLookup()的文档声明: 根据指定的键select器函数从IEnumerable创build一个Lookup。 但返回types是ILookup<TKey, TElement> 。 在Edulinq中 ,Jon Skeet提到返回types是List<T>而不是IList<T> ,但是并没有进一步触及这个主题。 广泛的search没有得到答案,所以在这里我问你: 是否有任何devise决定背后没有键入作为接口的返回值,还是只是偶然?

标记界面的目的是什么?

标记界面的目的是什么?

在JDK中默认是Java中的多重inheritance吗?

JDK 8中提供的新function允许您添加到现有界面,同时保持二进制兼容性。 语法就像 public interface SomeInterface() { void existingInterface(); void newInterface() default SomeClass.defaultImplementation; } 这种方式对于所有现有的SomeInterface实现,当他们升级到这个新版本时,他们并不都突然在newInterface()周围编译错误。 虽然这很整齐,但是当你实现两个接口时,会发生什么事情,这两个接口都添加了一个你没有实现的新的默认方法? 让我以一个例子来解释。 public interface Attendance { boolean present() default DefaultAttendance.present; } public interface Timeline { boolean present() default DefaultTimeline.present; } public class TimeTravelingStudent implements Attendance, Timeline { } // which code gets called? new TimeTravelingStudent().present(); 这是否被定义为JDK 8的一部分呢? 我发现Java神在这里谈论类似的东西http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html ,但它的私人邮件列表的一部分,我不能直接问他们。 有关如何在JDK […]

Java的接口和Haskell的types类:差异和相似之处?

当我正在学习Haskell的时候,我注意到了它的types类 ,它被认为是源自Haskell的一个伟大的发明。 但是,在维基百科页面上键入class : 程序员通过指定一组函数或常量名称以及它们各自的types来定义一个types类别,这些types必须存在于属于该类别的每种types中。 这对我来说似乎与Java的界面相当接近(引用维基百科的界面(Java)页面 ): Java编程语言中的接口是一种抽象types,用于指定类必须实现的接口(在术语的通用意义上)。 这两个看起来很相似:types限制一个types的行为,而接口限制一个类的行为。 我想知道Haskell中的types和Java中的接口有什么不同和相似之处,或者它们有着根本的不同? 编辑:我注意到, 即使haskell.org承认,他们是相似的 。 如果他们如此相似(或者他们?),那么为什么types会被这样的炒作对待呢? 更多编辑:哇,这么多伟大的答案! 我想我必须让社区决定哪一个是最好的。 但是,在阅读答案的同时,他们似乎只是说“类接口可以做很多事情,而接口不能或者不得不应对generics” 。 我不禁想知道,有什么接口可以做,而typeclasses不能? 另外,我注意到维基百科声称types类最初是在1989年发表的论文“如何使临时多态不那么临时”发明的,而Haskell仍然处于摇篮中,而Java项目于1991年开始,并于1995年首次发布那么也许不是typeclass与接口类似,反过来说,接口又受typestypes的影响? 有没有文件/文件支持或反驳呢? 感谢所有的答案,他们都非常有启发性! 感谢所有的投入!

抽象类与C ++中的接口

可能重复: 你如何在C ++中声明一个接口? 这是一个关于C ++的普遍问题。 如您所知,C ++中的interface和abstract class与Java和C#不同,没有明显的区别。 什么时候使用C ++中的interface而不是abstract class更可取? 你能举一些例子吗?

扩展方法可以应用于接口吗?

是否可以将扩展方法应用于接口? (C#问题) 这是例如达到以下目的: 创build一个ITopology界面 为这个接口创build一个扩展方法(例如public static int CountNodes(this ITopology topologyIf)) 那么当创build实现ITopology的类(例如MyGraph)时,它将自动具有Count Nodes扩展。 这样,实现接口的类将不必具有设置的类名称以与扩展方法中定义的内容相对应。

面向对象编程中“接口”的定义是什么?

好的,我的一个朋友来回谈“接口”在编程方面的含义。 什么是“界面”的最佳描述。 对我来说界面是一个阶级的蓝图,这是最好的定义吗?

IComparable和IEquatable接口有什么区别?

这两个接口似乎比较对象的平等,所以他们之间的主要区别是什么?

如何在使用接口时实现私人setter?

我已经创build了一些属性的接口。 如果接口不存在,则将该类对象的所有属性设置为 {get; private set; } 但是,在使用一个接口的时候这是不允许的,那么这个可以实现吗?

为什么一个接口不能实现另一个接口?

我的意思是: interface B {…} interface A extends B {…} // allowed interface A implements B {…} // not allowed 我GOOGLE了,我发现这个 : implements表示定义接口方法的实现。 但是接口没有实现,所以这是不可能的。 然而,接口是一个100%的抽象类,抽象类可以实现接口(100%抽象类)而不用实现它的方法。 什么是定义为“接口”的问题? 具体而言, interface A { void methodA(); } abstract class B implements A {} // we may not implement methodA() but allowed class C extends B { void methodA(){} } interface […]