标签: interface

为什么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
} // end of method Example::Dispose
Run Code Online (Sandbox Code Playgroud)

请注意,该方法virtual final在IL中声明.

c# methods virtual-functions interface abstract

106
推荐指数
3
解决办法
7万
查看次数

当我可以直接实现这些方法时,为什么我应该在C#中使用接口

我知道这是一个非常基本的问题,但是一位采访者以非常戏法的方式问我,我很无奈:(

我只知道接口的材料或理论定义,并且在我工作的许多项目中也实现了它.但我真的不明白为什么以及如何有用.

我也不了解界面中的一件事.即,例如,我们使用

conn.Dispose();在最后一块.但我没有看到该类正在实现或继承IDisposableinterface(SqlConnection)类我的意思.我想知道如何调用方法名称.同样,我不了解Dispose方法是如何工作的,因为我们需要使用我们自己的实现为所有接口方法实现函数体.接口如何被接受或命名为合同?到目前为止,这些问题一直在我心中滚动,坦率地说,我从来没有看到任何能以我能理解的方式解释我的问题的好线程.

MSDN像往常一样看起来非常可怕,没有一行是明确的(伙计们,善意的理由是谁进入高级开发,我强烈认为任何代码或文章应该达到任何人看到它的想法,因此像许多人说的那样,MSDN是没用的).

采访者说:

他有5种方法,他很乐意直接在课堂上实现它,但如果你必须选择抽象类或接口,你选择哪一种,为什么?我确实回答了他在各种博客中读到的所有内容,说明抽象类和界面的优缺点,但他不相信,他试图理解"为什么界面"."为什么抽象类"一般,即使我只能实现相同的方法一次而不是改变它.

我看不到网络中的任何地方,我可以得到一篇文章,可以清楚地解释我的接口及其功能.我是众多程序员中的一员,他们仍然不了解接口(我知道我使用的理论和方法)但不满意我清楚地理解它.

c# oop abstraction interface class

106
推荐指数
6
解决办法
8万
查看次数

为什么java类不从已实现的接口继承注释?

我一直在使用Guice的AOP来拦截一些方法调用.我的类实现了一个接口,我想注释接口方法,以便Guice可以选择正确的方法.即使注释类型使用Inherited annotation注释,实现类也不会继承Inherited的java doc中所述的注释:

另请注意,此元注释仅导致注释从超类继承; 已实现接口上的注释无效.

这可能是什么原因?了解对象类在运行时实现的所有接口并不是一件难事,因此必须有充分的理由支持这一决策.

java inheritance annotations interface guice

105
推荐指数
2
解决办法
6万
查看次数

从通用基类继承,应用约束,并在C#中实现接口

这是一个语法问题.我有一个泛型类,它继承自泛型基类,并将约束应用于其中一个类型参数.我还希望派生类实现一个接口.对于我的生活,我似乎无法弄清楚正确的语法.

这就是我所拥有的:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
Run Code Online (Sandbox Code Playgroud)

首先想到的是:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Run Code Online (Sandbox Code Playgroud)

但这是不正确的,因为这导致T2需要实现IBar和IFoo,而不是DerivedFoo来实现IFoo.

我尝试了一些谷歌搜索,使用冒号,分号等,但我已经调整了.我确定答案很简单.

c# generics inheritance interface constraints

102
推荐指数
3
解决办法
5万
查看次数

是否应将Javadoc评论添加到实施中?

在接口中添加Javadoc注释并在实现中添加非Javadoc注释是否正确?

当您自动生成注释时,大多数IDE会为实现生成非JavaDoc注释.具体方法不应该有描述吗?

java comments javadoc interface

102
推荐指数
6
解决办法
6万
查看次数

为什么接口无法实现其他接口?

我的意思是:

interface B {...}

interface A extends B {...} // allowed  

interface A implements B {...} // not allowed
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索它,我发现了这个:

implements表示定义接口方法的实现.但是接口没有实现,所以这是不可能的.

但是,interface是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 B implements A {} // not allowed. 
//however, interface B = %100 abstract class B
Run Code Online (Sandbox Code Playgroud)

java oop inheritance interface

102
推荐指数
2
解决办法
10万
查看次数

面向对象编程中"接口"的定义是什么

好吧,我的一个朋友在编程中"界面"意味着来回走动.

什么是"界面"的最佳描述.

对我来说,一个接口是一个类的蓝图,这是最好的定义吗?

oop interface definition

101
推荐指数
7
解决办法
13万
查看次数

接口常量的优缺点

PHP接口允许在接口中定义常量,例如

interface FooBar
{
    const FOO = 1;
    const BAR = 2;
}
echo FooBar::FOO; // 1
Run Code Online (Sandbox Code Playgroud)

任何实现类都将自动提供这些常量,例如

class MyFooBar implement FooBar
{
}
echo MyFooBar::FOO; // 1
Run Code Online (Sandbox Code Playgroud)

我对此的看法是,任何Global都是邪恶的.但我想知道接口常量是否同样适用.鉴于对接口的编码通常被认为是良好的做法,使用接口常量是在类上下文之外使用的唯一常量吗?

虽然我很想听听您的个人意见以及您是否使用界面常量,但我主要是在您的答案中寻找客观原因.我不希望这是一个民意调查问题.我对使用接口常量对可维护性有什么影响感兴趣.耦合.或单元测试.它与SOLID PHP有什么关系?它是否违反了任何被认为是PHP良好实践的编码原则?你明白了......

注意: Java有一个类似的问题列出了一些很好的理由,说明它们是Bad Practice,但由于Java不是PHP,我认为再次在PHP标记中提出它是合理的.

php interface constants

101
推荐指数
2
解决办法
3万
查看次数

在接口中受保护

为什么interface定义中的所有方法都是隐含的public?为什么它不允许protected方法?

java interface

101
推荐指数
8
解决办法
4万
查看次数

有没有办法在ES6/Node 4中创建接口?

ES6在Node 4中完全可用.我想知道它是否包含定义方法合同的接口概念,如MyClass implements MyInterface.

我用谷歌搜索找不到多少,但也许有一个很好的技巧或解决方法可用.

javascript interface node.js ecmascript-6

101
推荐指数
4
解决办法
8万
查看次数