我不太清楚如何解释这个(这就是为什么标题有点奇怪)但我会有一个去.基本上我正在做一些面向对象的设计,我想表示各种不同类型的对象,每个对象都可以执行各种操作.一个示例可能会有所帮助:诸如可以具有删除,重命名和打开操作的文件以及可以运行,关闭,卸载和移动到其他监视器操作的应用程序.
我的第一个想法是使用一个接口(IAction)并让我所有的类用于不同类型的对象实现该接口,但这不起作用,因为每个对象将具有接口将不知道的不同方法.
然后出现的问题是,如果它们都有不同的方法,那么方法实际上会被调用 - 因为在运行时,不可能知道哪些对象具有哪些方法.这是另一个问题 - 我希望每个对象能够生成它所拥有的方法列表,然后让我调用它们中的任何一个.
这需要用反射来完成吗?我很确定它不能用标准接口完成 - 但我对所有这些OOP设计都有点新意,所以我不完全确定.
今天我收到了邮件中的"Head First Design Patterns"一书.到目前为止相当有趣的东西,但我确实有一个关于它的内容的问题.
我没有Java/C#背景,我现在也不想跳到这些语言(我首先想要专注于C++).在本书中说java没有接口的实现......这意味着对于该接口的每次更改,您都必须修改实现该接口的所有子类.
这是如何在C++中完成的?我错过了什么?
我有以下情况:
// 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) 我正在使用各种对象在ASP.NET/VB.NET中构建一个体面的应用程序...我之前从未使用过接口,当我向他提到这个时,一位程序员也不愿意这样做.任何人都可以快速概述一下它们的使用方法,它们的用途以及我使用它们的原因吗?也许我不需要在这个项目中使用它们,但如果它们有所帮助,我肯定会喜欢尝试.
非常感谢!
我有一种情况,我认为我需要接口和抽象类提供的功能.
我正在创建模拟中使用的模型.每个模型都包含在一个C#类中,该类实现了一个IModel接口(我的设计是可以修改的).我还创建了一个c ++非托管Win32 DLL,它充当我的C#模型类和模拟环境之间的桥梁.模型类通过COM调用,因此需要接口.
我刚收到一个新的要求,即这些模型类应该可以通过Web服务进行调用,而与模拟环境无关.现在这些模型相当敏感,客户端已请求由客户端配置并在服务器上执行*.我认为如果我使模型类继承自抽象类,然后在服务器上创建一个Web服务方法,这将是可能的:
public AbstractModel executeModel(AbstractModel modelForExecution)
Run Code Online (Sandbox Code Playgroud)
从客户端接收模型对象,执行它并用结果填充它.
但是 - 我不能使用抽象类,因为模型需要COM实现的接口.
我如何协调这两个要求?我被告知可以让一个类实现一个接口并让该类派生自一个抽象类,但我找不到任何这样的例子.如果可能,语法是什么?如果不可能,我该怎么办?
*模型类实际上调用了古老的fortran可执行文件,因此类的模型配置并没有提供有关模型如何工作的太多信息.
可能是最着名的软件开发人员面试问题之一.
你的答案是什么?
编辑:我想知道如何在现实生活中回答这个问题.请尝试像在实际面试时一样制定答案(完整,但不要太长,当然不发布任何链接).
我有一个名为Foo的对象.现在它实现了IFoo,它有很多属性.
我有一个类只依赖于其中的一些属性所以我创建了IMeasurableFoo(它只有一些属性)
为了避免重复的代码,我现在有IFoo:IMeasurableFoo,因为我将属性移动到IMeasurableFoo
但是从继承的角度来看,这是错误的,因为你有一个从特定接口继承的更通用的接口
关于组织这些抽象的最佳方法的任何想法
例如,如果这些是具体结果:
Bird不会继承FlyingBird(它会反过来)
我正在尝试使用泛型构建一个函数,它将接口切片转换为 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
假设 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 类不知道我们所做的更改的方法的实现。
预先感谢您的任何帮助!
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 接口。
以正确的方式实施此方法的解决方案是什么?