标签: interface

C# - 无法将List <Product>类型隐式转换为List <IProduct>

我有一个包含所有接口定义
的项目:RivWorks.Interfaces 我有一个项目,我定义了具体的实现:RivWorks.DTO

我之前已经完成了数百次但由于某种原因我现在收到此错误:

无法将类型'System.Collections.Generic.List <RivWorks.DTO.Product>'隐式转换为'System.Collections.Generic.List <RivWorks.Interfaces.DataContracts.IProduct>'

接口定义(缩写):

namespace RivWorks.Interfaces.DataContracts
{
    public interface IProduct
    {
        [XmlElement]
        [DataMember(Name = "ID", Order = 0)]
        Guid ProductID { get; set; }
        [XmlElement]
        [DataMember(Name = "altID", Order = 1)]
        long alternateProductID { get; set; }
        [XmlElement]
        [DataMember(Name = "CompanyId", Order = 2)]
        Guid CompanyId { get; set; }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

具体类定义(缩写):

namespace RivWorks.DTO
{
    [DataContract(Name = "Product", Namespace = "http://rivworks.com/DataContracts/2009/01/15")]
    public class Product : IProduct
    {
        #region Constructors
        public Product() { }
        public …
Run Code Online (Sandbox Code Playgroud)

c# compiler-errors interface

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

理解C#中的Covariant和Contravariant接口

我在C#上阅读的教科书中遇到过这些,但我很难理解它们,可能是由于缺乏背景.

是否有一个很简洁的解释,说明它们是什么以及它们对那里有用的东西?

编辑以澄清:

协变界面:

interface IBibble<out T>
.
.
Run Code Online (Sandbox Code Playgroud)

逆变接口:

interface IBibble<in T>
.
.
Run Code Online (Sandbox Code Playgroud)

.net c# interface covariance contravariance

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

如何将代理添加到接口C#

我需要在班上有一些代表.

我想使用界面"提醒"我设置这些代表.

如何?

我的班级看起来像这样:

public class ClsPictures : myInterface
{
    // Implementing the IProcess interface
    public event UpdateStatusEventHandler UpdateStatusText;
    public delegate void UpdateStatusEventHandler(string Status);

    public event StartedEventHandler Started;
    public delegate void StartedEventHandler();
}
Run Code Online (Sandbox Code Playgroud)

我需要一个界面来强制这些代表:

public interface myInterface
{
   // ?????
}
Run Code Online (Sandbox Code Playgroud)

c# delegates interface

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

.h和.m文件中的@interface定义之间的区别

通常我们使用

@interface interface_name : parent_class <delegates>
{
......
}
@end 
Run Code Online (Sandbox Code Playgroud)

在.h文件和.m文件中的方法中,我们合成了在.h文件中声明的变量的属性.

但是在某些代码中,这个@interface ..... @ end方法也保存在.m文件中.这是什么意思?他们之间有什么区别?

还要提供一些关于.m文件中定义的接口文件的getter和setter的话.

提前致谢

getter setter interface objective-c header-files

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

JDK 8中的默认值是Java中的多重继承形式吗?

JDK 8中的新功能允许您在保留二进制兼容性的同时添加到现有接口.

语法就像

public interface SomeInterface() {
  void existingInterface();
  void newInterface() default SomeClass.defaultImplementation;
}
Run Code Online (Sandbox Code Playgroud)

这种方式对于所有现有的实现,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();
Run Code Online (Sandbox Code Playgroud)

这被定义为JDK 8的一部分了吗?

我发现Java神在这里谈论类似的东西http://cs.oswego.edu/pipermail/lambda-lib/2011-February/000068.html,但它是私人邮件列表的一部分,我不能直接问他们.

有关如何在JDK 8中使用默认值以及扩展Collection接口以支持lambdas的更多详细信息,请参阅此处:https: //oracleus.wingateweb.com/published/oracleus2011/sessions/25066/25066_Cho223662.pdf

java closures interface multiple-inheritance java-8

80
推荐指数
5
解决办法
2万
查看次数

Java中default关键字的用途是什么?

Java中的接口类似于类,但接口的主体只能包含抽象方法final字段(常量).

最近,我看到了一个问题,看起来像这样

interface AnInterface {
    public default void myMethod() {
        System.out.println("D");
    }
}
Run Code Online (Sandbox Code Playgroud)

根据接口定义,允许抽象方法.为什么它允许我编译上面的代码?什么是default关键字?

另一方面,当我试图写下面的代码时,它说 modifier default not allowed here

default class MyClass{

}
Run Code Online (Sandbox Code Playgroud)

代替

class MyClass {

}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我default关键字的目的?是否只允许在界面内?它与default(无访问修饰符)有何不同?

java default interface java-8

80
推荐指数
5
解决办法
4万
查看次数

返回IList <T>比返回T []或List <T>更糟糕吗?

像这样的问题的答案:List <T>或IList <T>似乎总是同意返回一个接口比返回一个集合的具体实现更好.但我正在努力解决这个问题.实例化接口是不可能的,因此如果您的方法返回一个接口,它实际上仍然返回一个特定的实现.我通过编写两个小方法来尝试一下这个:

public static IList<int> ExposeArrayIList()
{
    return new[] { 1, 2, 3 };
}

public static IList<int> ExposeListIList()
{
    return new List<int> { 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)

并在我的测试程序中使用它们:

static void Main(string[] args)
{
    IList<int> arrayIList = ExposeArrayIList();
    IList<int> listIList = ExposeListIList();

    //Will give a runtime error
    arrayIList.Add(10);
    //Runs perfectly
    listIList.Add(10);
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,当我尝试添加新值时,我的编译器没有给我任何错误,但显然IList<T>当我尝试向其添加内容时,将我的数组公开为暴露的方法会产生运行时错误.因此,那些不知道我的方法中发生了什么,并且必须为其添加值的人,被迫首先将我复制IList到a List以便能够添加值而不会有错误.当然,他们可以做一个类型检查,看看他们是否正在处理a List或者a Array,但是如果他们不这样做,并且他们想要将项目添加到集合中,他们别无选择将其复制IList到a List,即使它已经是一个List.数组永远不会暴露为IList

我的另一个问题是基于相关问题的接受答案(强调我的):

如果您通过其他人将使用的库公开您的类, …

.net c# abstraction interface

80
推荐指数
5
解决办法
4601
查看次数

Java中的抽象类与接口

我被问到一个问题,我想在这里查看我的答案.

问:在哪种情况下扩展抽象类而不是实现接口更合适?

答:如果我们使用模板方法设计模式.

我对么 ?

如果我无法清楚地陈述问题,我很抱歉.
我知道抽象类和接口之间的基本区别.

1)当需求需要在特定操作的每个子类中实现相同的功能(实现方法)和其他一些操作的不同功能(仅方法签名)时,使用抽象类

2)如果需要将签名设置为相同(并且实现不同),请使用接口,以便您可以遵守接口实现

3)我们可以扩展一个抽象类的最大值,但可以实现多个接口

重申一个问题:除了上面提到的那些之外,还有其他任何场景,具体我们需要使用抽象类(一个是模板方法设计模式在概念上仅基于此)吗?

接口与抽象类

在这两者之间做出选择真的取决于你想做什么,但幸运的是,对我们来说,Erich Gamma可以帮助我们一点.

一如既往地存在权衡,接口为您提供基类的自由,抽象类使您可以自由地在以后添加新方法. - Erich Gamma

无法在不改变代码中的许多其他东西的情况下更改接口,因此避免这种情况的唯一方法是创建一个全新的接口,这可能并不总是一件好事.

Abstract classes应主要用于密切相关的对象.Interfaces更好地为不相关的类提供通用功能.

java abstract-class design-patterns interface

79
推荐指数
7
解决办法
8万
查看次数

为什么PHP Trait无法实现接口?

我想知道为什么PHP Trait(PHP 5.4)无法实现接口.

从user1460043的answer => ...更新不能要求使用它来实现特定接口的类

我明白这可能是显而易见的,因为人们可以认为如果一个人Class A正在使用一个Trait T正在实施的interface I,那么Class A应该是直接实现的interface I(这不是真的,因为Class A可以重命名特征方法).

在我的例子中,我的特性是从使用特征的类实现的接口调用方法.

该特征实际上是接口的一些方法的实现.所以,我想在代码中"设计"每个想要使用我的特性的类都必须实现该接口.这将允许Trait使用接口定义的类方法,并确保它们存在于类中.

php oop interface traits

79
推荐指数
4
解决办法
3万
查看次数

如何在python中扩展一个类?

在python中你怎么能扩展一个类?例如,如果我有

color.py

class Color:
    def __init__(self, color):
        self.color = color
    def getcolor(self):
        return self.color
Run Code Online (Sandbox Code Playgroud)

color_extended.py

import Color

class Color:
    def getcolor(self):
        return self.color + " extended!"
Run Code Online (Sandbox Code Playgroud)

但是这不起作用......我希望如果我工作color_extended.py,那么当我创建一个颜色对象并使用该getcolor函数时,它将返回带有字符串"extended!"的对象.到底.此外,它应该从导入gotton init.

假设python 3.1

谢谢

python interface class

79
推荐指数
2
解决办法
11万
查看次数