gpt4 book ai didi

c# - 如何在 C# 中引用特定的类类型?

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:58 26 4
gpt4 key购买 nike

是否可以获取类类型的引用/指针并强制它派生自特定基类?

我正在编写一个客户端库,它需要与服务器协商以选择用于通信的算法。我希望库的用户能够选择要使用的算法子集,而不是固定到我最初提供的集合(即不固定在某种工厂类中)。

理想情况下,这将通过传入从某些常见“算法”子类型派生的类列表来完成。我见过“类型”对象,但我必须自己检查所有类型。有没有办法让编译器为我做这件事?我想要的是类似“Type ”的东西,但我找不到类似的东西。还是有完全不同的方法来做到这一点?

到目前为止我想到的一个例子:

public class Algorithm {
public static abstract Name;
}

public class Client {
public MyLib(Type[] algorithms) {
m_algorithms = algorithms;
// ... Check they all derive from Algorithm
}

public Communicate() {
// ... Send list of algorithm names to server
// ... Create instance of algorithm dictated by server response
}
}

最佳答案

在调用 Communicate() 之前您是否不想实例化 Algorithm 对象?

如果您愿意传递实例列表,那么您可以这样做:

public class Client {
public MyLib(IList<Algorithm> algorithms) {
m_algorithms = algorithms;
// ... They all derive from Algorithm
}
public Communicate() {
// ... Send list of algorithm names to server
// ... Use instance of algorithm dictated by server response
}
}

这还允许您编写带有调整参数的算法实现,如下所示:

public class MyAlgorithm : Algorithm {
public MyAlgorithm(int tolerance) {
// ...
}
}

并且 Communicate 不必担心如何构建 MyAlgorithm。

关于c# - 如何在 C# 中引用特定的类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com