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