这在 C# 中根本不可能。但这是试图将一种语言用作另一种不同的语言的情况。在 C++ 中,这种模式有其用途。您可以在 C# 中完成相同的事情,但使用不同的技术。
也许这会帮助你:
class Myclass
{
}
class ChildClass : MyClass
{
}
class MockComposite<T> where T : MyClass
{
public MockComposite(T objectToTest) { ... }
}
在这里,您可以传递派生自MyClass
into的任何类CompositeTester<>
。这和你的代码最大的区别是,这里你需要传入真实的现有非泛型类,这些类继承MyClass
. 您正在尝试进行一般继承,这是不可能的。
在 C++ 中,这基本上就像在做:
class Myclass
{
};
class ChildClass : MyClass
{
};
template<typename T>
class MockComposite
{
public:
MockComposite(const T& objectToTest) { ... }
};
C# 泛型可能看起来有点像 C++ 模板,但这是一个完全不同的想法。虽然 C++ 模板让您非常灵活,几乎可以像宏一样,但泛型在类型方面仍然相当紧凑。你不能用一个你没有说它可以显式做的泛型类型做任何事情,因此像where T : MyClass
. 通过指定,MockComposite.MockComposite
可以T
用作MyType
.