C# 定义类型为'的变量;类型';它只接受属于特定类型的子类的类型

C# 定义类型为'的变量;类型';它只接受属于特定类型的子类的类型,c#,C#,我使用的是C#,代码中有以下方法: public void Test(System.Type type) {...} 但是我希望变量“type”表示一个类型,它必须是classMyClass的子类。我不想让“type”本身成为MyClass的子类,因为它应该表示一个类型。例如,不应允许调用Test(typeof(int)),因为'int'不是MyClass的子类 在C#中可能吗 更新: 在花了很长时间试图在网上找到解决方案后,我问了这个问题,但事实证明,以前在这里已经有人问过了:我错过了。糟糕

我使用的是C#,代码中有以下方法:

public void Test(System.Type type) {...}
但是我希望变量“type”表示一个类型,它必须是class
MyClass
的子类。我不想让“type”本身成为
MyClass
的子类,因为它应该表示一个类型。例如,不应允许调用
Test(typeof(int))
,因为'int'不是
MyClass
的子类

在C#中可能吗

更新: 在花了很长时间试图在网上找到解决方案后,我问了这个问题,但事实证明,以前在这里已经有人问过了:我错过了。糟糕的是,即使是那条线索中的答案似乎也不能很好地解决问题

更新2:
结果表明(请参阅此问题的解决方案),可以使用泛型,而不是将参数传递给方法,而且它似乎工作得很好。

为此,可以使用泛型和约束:

public void Test<T>() where T : MyClass
{
    var type = typeof(T);
    // ...
}
public void Test(),其中T:MyClass
{
var类型=类型(T);
// ...
}

使用通用参数?和。。。哪里是
MyClass
?我在您的代码中看不到它。可以使用泛型,但不是指定的问题。
Test(),其中t:MyClass
@yyy所有类型都不是类型的子类。所有类型都是
Object
的子类。如何将参数传递给方法Test()?@yyy,这不是必需的,
Test
从泛型类型参数创建
type
变量本身。您可以这样称呼它:
Test()。无法使用
Test()调用它,因为类型约束
,其中T:MyClass
。但是你只能使用这个方法,如果你在编译时知道类型名的话。哦,现在我明白了。感谢Xiaoy312和Olivier Jacot Descombes!