标签: interface

抽象类与接口与mixins

有人可以向我解释抽象类,接口mixins之间的区别吗?我之前在我的代码中使用了每个,但我不知道技术差异.

oop abstract-class terminology interface mixins

68
推荐指数
4
解决办法
2万
查看次数

风格的不同:IDictionary与Dictionary

我有一个朋友刚刚开始使用Java开发.NET开发很长时间,在查看了他的一些代码后,我注意到他经常做以下事情:

IDictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();
Run Code Online (Sandbox Code Playgroud)

他将字典声明为接口而不是类.通常我会做以下事情:

Dictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();
Run Code Online (Sandbox Code Playgroud)

我只在需要时使用IDictionary接口(例如,将字典传递给接受IDictionary接口的方法).

我的问题是:他的做事方式有什么优点吗?这是Java中的常见做法吗?

.net c# java interface

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

为什么我不能拥有受保护的接口成员?

反对在接口上声明受保护访问成员的论点是什么?例如,这是无效的:

public interface IOrange
{
    public OrangePeel Peel { get; }
    protected OrangePips Seeds { get; }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,接口IOrange将保证实现者至少OrangePips向其继承者提供实例.如果实现者想要,他们可以扩大范围public:

public class NavelOrange : IOrange
{
    public OrangePeel Peel { get { return new OrangePeel(); } }
    protected OrangePips Seeds { get { return null; } }
}

public class ValenciaOrange : IOrange
{
    public OrangePeel Peel { get { return new OrangePeel(); } }
    public OrangePips Seeds { get { return new OrangePips(6); …
Run Code Online (Sandbox Code Playgroud)

c# interface protected access-modifiers

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

Java反射:创建一个实现类

Class someInterface = Class.fromName("some.package.SomeInterface");
Run Code Online (Sandbox Code Playgroud)

我现在如何创建一个实现的新类someInterface

我需要创建一个新类,并将其传递给需要SomeInterface作为参数的函数.

java reflection interface

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

在设计C#类库时,何时应该在接口上选择继承?

我有一些数字Processor类可以完成两个非常不同的事情,但是从公共代码调用("控制反转"情况).

我想知道在决定它们是否应该全部继承BaseProcessor或实现IProcessor为接口时,我应该认识(或认识到,对于你的USsers)的设计考虑因素.

c# oop inheritance design-patterns interface

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

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

扩展方法ToList()返回一个List<TSource>.遵循相同的模式,ToDictionary()返回一个Dictionary<TKey, TSource>.

我很好奇,为什么这些方法没有键入他们的返回值IList<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); 
}
Run Code Online (Sandbox Code Playgroud)

那么为什么这个方法将其返回值键入为接口的特定实现而不是接口本身呢?唯一的变化是返回类型.

我很好奇,因为IEnumerable<>扩展在签名上非常一致,除了这两种情况.我一直认为这有点奇怪.

此外,为了使事情更加混乱,州的文件ToLookup():

根据指定的键选择器函数从IEnumerable创建Lookup.

但是返回类型是ILookup<TKey, TElement>.

Edulinq,Jon Skeet提到返回类型List<T>不是IList<T>,而是不进一步触及主题.
广泛的搜索没有得到答案,所以在这里我问你:

是否有任何设计决策背后没有键入返回值作为接口,还是只是偶然?

c# linq ienumerable interface

67
推荐指数
4
解决办法
3567
查看次数

接口方法可以有一个体?

我知道界面就像100%纯抽象类.所以,它不能有方法实现.但是,我看到了一个奇怪的代码.有人能解释一下吗?

代码片段:

 interface Whoa {
        public static void doStuff() {
            System.out.println("This is not default implementation");
        }
 }
Run Code Online (Sandbox Code Playgroud)

编辑:

我的IDE是Intellij Idea 13.1.项目SDK是java 7 <1.7.0_25>.IDE未显示任何编译器错误.但是,当我在命令行编译代码时,我收到以下消息.

Whoa.java:2: error: modifier static not allowed here
    public static void doStuff() {
                       ^
Run Code Online (Sandbox Code Playgroud)

java interface default-implementation java-8

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

从具有相同方法名称的多个接口继承

如果我们有一个继承自多个接口的类,并且接口具有相同名称的方法,那么我们如何在我的类中实现这些方法?我们如何指定实现哪个接口的方法?

c# methods inheritance interface multiple-inheritance

66
推荐指数
4
解决办法
7万
查看次数

MOQ - 如何模拟需要转换为另一个接口的接口?

我想要做的是为I1构建一个moq - 这很好......但是在我测试的方法过程中使用这个模拟我需要将它转换为I2才能访问一些不在的属性I1

Interface I1 
{ int AProperty{get;set;}}

Interface I2
{int AnotherProperty{get;set;}}
Run Code Online (Sandbox Code Playgroud)

然后我有一些对象

Class O1 : I1 {}
Run Code Online (Sandbox Code Playgroud)

Class O2 : O1 , I2 {}
Run Code Online (Sandbox Code Playgroud)

问题是,当我有一个I2实现对象的实例时,我可以将它转换为I1,以便访问通过该接口实现的方法.在代码中,这不是问题,并且每个标志都按预期工作.

在该类上编写单元测试时,唯一的问题就出现了.

接口还公开了一个名为GetNewInstance的方法,该方法返回一个初始化的实现对象实例,该实例对象被转换为IGetNewInstance接口...我通常可以模拟这个并使其自行返回(因此我继续使用模拟对象).

但是,当您尝试将此类型I2的返回对象转换为I1时,将引用空引用 - 这是有意义的,因为实现I2的模拟对象不会从继承I1的任何内容继承.

问题是我如何强制模拟对象同时从I1和I2继承?

inheritance unit-testing interface moq

66
推荐指数
1
解决办法
2万
查看次数

关键字var后面的下划线和接口名称是什么意思?

来自http://golang.org/src/pkg/database/sql/driver/types.go :

type ValueConverter interface {
    // ConvertValue converts a value to a driver Value.
    ConvertValue(v interface{}) (Value, error)
}

var Bool boolType

type boolType struct{}

var _ ValueConverter = boolType{} // line 58

func (boolType) String() string { return "Bool" }

func (boolType) ConvertValue(src interface{}) (Value, error) {....}
Run Code Online (Sandbox Code Playgroud)

我知道ValueConverter是一个接口名称.第58行似乎声明boolType实现接口ValueConverter,但这是必要的吗?我删除了第58行,代码运行良好.

syntax interface go underscores

66
推荐指数
2
解决办法
1万
查看次数