标签: interface

方法,接口,反射和困难的OOP设计

我不太清楚如何解释这个(这就是为什么标题有点奇怪)但我会有一个去.基本上我正在做一些面向对象的设计,我想表示各种不同类型的对象,每个对象都可以执行各种操作.一个示例可能会有所帮助:诸如可以具有删除,重命名和打开操作的文件以及可以运行,关闭,卸载和移动到其他监视器操作的应用程序.

我的第一个想法是使用一个接口(IAction)并让我所有的类用于不同类型的对象实现该接口,但这不起作用,因为每个对象将具有接口将不知道的不同方法.

然后出现的问题是,如果它们都有不同的方法,那么方法实际上会被调用 - 因为在运行时,不可能知道哪些对象具有哪些方法.这是另一个问题 - 我希望每个对象能够生成它所拥有的方法列表,然后让我调用它们中的任何一个.

这需要用反射来完成吗?我很确定它不能用标准接口完成 - 但我对所有这些OOP设计都有点新意,所以我不完全确定.

.net oop reflection interface

0
推荐指数
1
解决办法
721
查看次数

Java:没有接口实现?

今天我收到了邮件中的"Head First Design Patterns"一书.到目前为止相当有趣的东西,但我确实有一个关于它的内容的问题.

我没有Java/C#背景,我现在也不想跳到这些语言(我首先想要专注于C++).在本书中说java没有接口的实现......这意味着对于该接口的每次更改,您都必须修改实现该接口的所有子类.

这是如何在C++中完成的?我错过了什么?

c++ java design-patterns interface

0
推荐指数
1
解决办法
1326
查看次数

使用公共接口和内部类型参数的泛型

我有以下情况:

// A public interface of some kind   
public interface IMyInterface {   
    int Something { get; set; }   
}   

// An internal class that implements the public interface.   
// Despite the internal/public mismatch, this works.   
internal class MyInternalConcrete : IMyInterface {   
    public int Something { get; set; }   
}   

// A generic class with an interface-restricted type parameter.
// Note that the constraint on T uses the *public* interface.
// The instance is *never* exposed as a public, or even …
Run Code Online (Sandbox Code Playgroud)

.net c# generics interface

0
推荐指数
2
解决办法
3383
查看次数

ASP.NET:不熟悉接口

我正在使用各种对象在ASP.NET/VB.NET中构建一个体面的应用程序...我之前从未使用过接口,当我向他提到这个时,一位程序员也不愿意这样做.任何人都可以快速概述一下它们的使用方法,它们的用途以及我使用它们的原因吗?也许我不需要在这个项目中使用它们,但如果它们有所帮助,我肯定会喜欢尝试.

非常感谢!

vb.net asp.net interface

0
推荐指数
1
解决办法
333
查看次数

我怎样才能有一个实现接口并继承自抽象类的类?(C#.NET 3.5)

我有一种情况,我认为我需要接口和抽象类提供的功能.

我正在创建模拟中使用的模型.每个模型都包含在一个C#类中,该类实现了一个IModel接口(我的设计是可以修改的).我还创建了一个c ++非托管Win32 DLL,它充当我的C#模型类和模拟环境之间的桥梁.模型类通过COM调用,因此需要接口.

我刚收到一个新的要求,即这些模型类应该可以通过Web服务进行调用,而与模拟环境无关.现在这些模型相当敏感,客户端已请求由客户端配置并在服务器上执行*.我认为如果我使模型类继承自抽象类,然后在服务器上创建一个Web服务方法,这将是可能的:

public AbstractModel executeModel(AbstractModel modelForExecution)
Run Code Online (Sandbox Code Playgroud)

从客户端接收模型对象,执行它并用结果填充它.

但是 - 我不能使用抽象类,因为模型需要COM实现的接口.

我如何协调这两个要求?我被告知可以让一个类实现一个接口并让该类派生自一个抽象类,但我找不到任何这样的例子.如果可能,语法是什么?如果不可能,我该怎么办?

*模型类实际上调用了古老的fortran可执行文件,因此类的模型配置并没有提供有关模型如何工作的太多信息.

c# com abstract-class interface

0
推荐指数
1
解决办法
487
查看次数

接口和抽象类有什么区别?

重复:

何时使用接口而不是抽象类,反之亦然?

可能是最着名的软件开发人员面试问题之一.

你的答案是什么?

编辑:我想知道如何在现实生活中回答这个问题.请尝试像在实际面试时一样制定答案(完整,但不要太长,当然不发布任何链接).

oop abstract-class interface

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

界面问题

我有一个名为Foo的对象.现在它实现了IFoo,它有很多属性.

我有一个类只依赖于其中的一些属性所以我创建了IMeasurableFoo(它只有一些属性)

为了避免重复的代码,我现在有IFoo:IMeasurableFoo,因为我将属性移动到IMeasurableFoo

但是从继承的角度来看,这是错误的,因为你有一个从特定接口继承的更通用的接口

关于组织这些抽象的最佳方法的任何想法

例如,如果这些是具体结果:

Bird不会继承FlyingBird(它会反过来)

c# interface

0
推荐指数
1
解决办法
215
查看次数

如何使用运行时类型反射来转换类型?

我正在尝试使用泛型构建一个函数,它将接口切片转换为 T 类型的切片。

我想出了以下内容:

func convertInterfaceArray[T any](input []any, res []T) {
    for _, item := range input {
        res = append(res, item.(reflect.TypeOf(res[0])))
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会编译。但你明白了。T 可以是任何类型,我有一个 []any 类型的输入切片需要转换为 []T

generics interface go

0
推荐指数
1
解决办法
57
查看次数

当我们改变一个方法的实现时,我们是否必须重新编译依赖类?

假设 TaxCalculator 类中有以下方法:

public double calculateTax(double income) {
    return income * 0.3;
}
Run Code Online (Sandbox Code Playgroud)

我们在 Main 类中使用这个方法,如下所示:

var calculator = new TaxCalculator();
double tax = calculator.calculateTax(100_000);
System.out.println(tax);
Run Code Online (Sandbox Code Playgroud)

如果我将该方法的实现更改calculateTax为:

public double calculateTax(double income) {
    return income * 0.4;
}
Run Code Online (Sandbox Code Playgroud)

我是否需要重新编译 TaxCalculator 类和 Main 类?

我知道这个问题听起来很愚蠢,但我在一次讲座中听说,如果我们不使用接口,我们在紧耦合代码中所做的每一个更改(就像我上面展示的那样)都会迫使我们重新编译所有依赖的类在课堂上我们做出了改变。

这对我来说听起来很奇怪,因为 Main 类不知道我们所做的更改的方法的实现。

预先感谢您的任何帮助!

java coupling interface

0
推荐指数
1
解决办法
202
查看次数

使用两个泛型实现接口

我的家庭作业中有一项任务,但我无法克服它。 在此输入图像描述

Transformer接口的代码如下:

public interface Transformer<FROM, TO> {
    TO transform(FROM value);
}
Run Code Online (Sandbox Code Playgroud)

PersonSubscriberTransformer到目前为止,该类的代码如下所示:

public class PersonSubscriberTransformer<FROM, TO> implements Transformer {
    private Predicate<Person> predicate;
    public PersonSubscriberTransformer(Predicate<Person> predicate) {
        this.predicate = predicate;
    }
    @Override
    public Object transform(Object value) {
        return null;
    }
  }
Run Code Online (Sandbox Code Playgroud)

变换方法的参数应该是List<Person>并且它应该返回一个List<Subscriber>. 当我更改参数时,我收到一条错误消息,提示我应该将该方法拉至 Transformer 接口。

以正确的方式实施此方法的解决方案是什么?

java generics inheritance interface

0
推荐指数
1
解决办法
45
查看次数