Tag: 接口

如何在IList <T>上执行二进制search?

简单的问题 – 给定一个IList<T>你如何执行二进制search,而不用自己编写方法,也不要将数据复制到具有内置二进制search支持的types。 我目前的状态如下。 List<T>.BinarySearch()不是IList<T>的成员 List<T>没有等价的ArrayList.Adapter()方法 IList<T>不从IListinheritance,因此使用ArrayList.Adapter()是不可能的 我倾向于认为用内置的方法是不可能的,但我不能相信BCL / FCL中没有这样一个基本的方法。 如果不可能,谁可以给IList<T>最短,最快,最聪明,最漂亮的二进制search实现? UPDATE 我们都知道,在使用二分search之前,一个列表必须被sorting,因此您可以假设它是。 但我认为(但没有validation)这是sorting相同的问题 – 你如何sortingIList<T> ? 结论 似乎没有内置的二进制searchIList<T> 。 可以使用First()和OrderBy() LINQ方法进行search和sorting,但它可能会带来性能问题。 自己实现(作为扩展方法)似乎是你能做的最好的。

generics方法实现中不同的返回值types

今天,我偶然发现了一些我不希望编译的Java代码。 减less到最低限度,看起来像这样: import java.util.List; interface A { <T> List<String> foo(); } interface B { <T> List<Integer> foo(); } class C implements A, B { @Override public List<?> foo() { return null; } } 乍一看, A和B foo方法的types参数<T>看起来没有必要,因为在其他地方没有使用T 无论如何,我发现这在允许相互冲突的返回值types在同一个实现中共存的过程中发挥了至关重要的作用:如果一个或两个<T>被遗漏,代码不会被编译。 这里的非工作版本: import java.util.List; interface A { List<String> foo(); } interface B { List<Integer> foo(); } class C implements […]

ifconfig和接口

只是我的理解问题。 在我的Mac上,当我在我的Mac上使用ifconfig命令我得到以下接口: EN0 EN1 lo0的 fw0 vment0 vment1 我不明白为什么有这么多。 我知道eth0将用于LAN连接,而en0是无线连接。 但是,macbook只有一个机场..那么为什么en1呢? 不知道什么vment是。

为什么接口首选抽象类?

我最近参加了一个采访,他们问我“为什么接口比抽象类更受欢迎? 我试着给出几个答案,如: 我们只能得到一个Extendsfunction 他们是100%摘要 实现不是硬编码的 他们问我使用任何你使用的JDBC API。 “他们为什么是接口?” 我能得到更好的答案吗?

java接口如何在内部实现? (虚函数表?)

C ++有多重inheritance。 在汇编级别实现多重inheritance可能相当复杂,但是在线上有很好的介绍如何正常完成(vtables,pointer fixups,thunk等)。 Java没有多个实现inheritance,但是它有多个接口inheritance,所以我不认为每个类都有一个单独的vtable可以实现这一点。 java如何在内部实现接口? 我意识到,与C ++相反,Java是Jit编译的,所以不同的代码段可能会有不同的优化,而不同的JVM可能会做不同的事情。 那么,是否有一些JVM遵循的一般策略,或者是否有人知道特定JVM中的实现? 另外JVM经常虚拟化和内联方法调用,在这种情况下根本就没有涉及到vtable或等价物,所以询问实现虚拟/接口方法调用的实际汇编序列是没有意义的,但是我认为大多数JVM仍然保留一些如果它们没有能够虚拟化所有的东西,那么可以使用类的一般表示。 这个假设是错误的吗? 这种表示看起来像一个C ++的vtable? 如果是的话,接口是否有单独的vtables,这些如何与类vtable相关联? 如果是这样,对象实例可以有多个vtable指针(类/接口vtables),就像C ++中的对象实例一样? 类types和接口types对同一对象的引用总是具有相同的二进制值,或者它们可以不同,就像在C ++中需要指针修正一样? (仅供参考: 这个问题对CLR提出了类似的问题 ,在这篇msdn文章中似乎有一个很好的解释,尽pipe现在可能已经过时了,但我还没有find类似于Java的东西。 编辑: 我的意思是“实现”的意思是“GCC编译器如何实现整数加法/函数调用/等”,而不是“Java类ArrayList实现List接口”的含义。 我知道这是如何在JVM字节码级别上工作的,我想知道的是JVM在加载类文件和编译字节码之后生成的是什么样的代码和数据结构。

C#与可选方法的接口

我明白,接口是合同,任何改变(甚至增加)打破任何相关的代码。 然而,我可以发誓我读了一段时间后,最近的.NET版本(3,3.5 ??)添加了一个新的属性,可以应用到新的接口成员。 该属性允许版本化和/或使成员可选。 它会是这样的: interface ITest { void MethodOne(); [InterfaceVersion(2)] void MethodTwo(); } 我已经看到这个高低,但似乎无法find它。 我想知道,我是不是误解了我认为自己读过的东西,而没有这样的东西。 有人有任何见解吗?

如何在Java中的接口声明上应用更多的约束?

假设我有以下界面: interface Mammal { void marry(Mammal m); Mammal giveBirthTo(); } 但是,这并不完全是我想要的。 显然,一个人不能娶一只狗,也不能生一只猫。 那么如何将这些信息embedded到接口中,使得inputtypes和输出types可以在实现时自动更改?

使用通用方法实现接口

我在这一个空白,似乎无法find我写的任何以前的例子。 我试图实现一个通用的接口类。 当我实现接口时,我认为有些东西不能正常工作,因为Visual Studio会不断产生错误,说我并没有实现通用接口中的所有方法。 以下是我正在使用的一个存根: public interface IOurTemplate<T, U> { IEnumerable<T> List<T>() where T : class; T Get<T, U>(U id) where T : class where U : class; } 那么我的class级应该怎样?

在C ++ 11中声明接口的最佳方法

众所周知,一些语言有接口的概念。 这是Java: public interface Testable { void test(); } 我怎样才能以最紧凑的方式在C ++(或C ++ 11)中实现这一点,而且代码噪声很小? 我将不胜感激一个解决scheme,不需要一个单独的定义(让头是足够的)。 这是一个非常简单的方法,即使我find越野车;-) class Testable { public: virtual void test() = 0; protected: Testable(); Testable(const Testable& that); Testable& operator= (const Testable& that); virtual ~Testable(); } 这只是一个开始,而且已经更长了,我想要的。 如何改善? 也许在这个std命名空间的某个地方有一个基类呢?

什么时候应该在deviseC#类库时通过接口selectinheritance?

我有一个Processor类,将做两个完全不同的事情,但从通用代码(“控制反转”情况)调用。 我想知道什么样的devise考虑因素,在决定它们是否应该全部从BaseProcessorinheritance,或者实现IP Processor作为接口时,我应该认识到(或认识到,对于你的USsers)。