我主要是一个Java程序员,所以这将是"Java中与C#相同的东西是什么"的问题之一.因此,在Java中,您可以在编译时限制Class类型参数来扩展某个超类,如下所示:
public <T extends BaseClass> void foo(Class<T> type) {
...
}
Run Code Online (Sandbox Code Playgroud)
乃至
public <T extends BaseClass> T foo(Class<T> type) {
...
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以链接多个接口:
public <T extends BaseClass & BaseInterface1 & BaseInterface2> void foo(Class<T> type) {
...
}
Run Code Online (Sandbox Code Playgroud)
这是如何在C#中完成的?我知道你可以使用"where T:BaseClass",但这只适用于你有一个实例T.当你只有一个Type实例时呢?
编辑:
为了解释,这是我想要做的:
ASSEMBLY#1(base.dll):
abstract class BaseClass {
abstract void Foo();
}
Run Code Online (Sandbox Code Playgroud)
ASSEMBLY#2(sub1.dll,引用base.dll):
class SubClass1 : BaseClass {
void Foo() {
// some code
}
}
Run Code Online (Sandbox Code Playgroud)
ASSEMBLY#3(sub2.dll,引用base.dll):
class SubClass2 : BaseClass {
void Foo() {
// some other code
} …Run Code Online (Sandbox Code Playgroud)