C# 是否可以使用没有类型参数的泛型类?
如果我有一个templatedgeneric类MyClass,是否可以执行以下操作:C# 是否可以使用没有类型参数的泛型类?,c#,templates,generics,C#,Templates,Generics,如果我有一个templatedgeneric类MyClass,是否可以执行以下操作: var b = someObject is MyClass; // without specifying <T> 不,不是,但您可以使用反射来检查类型: someObject.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(MyClass<>)) 不,不是,但您可以使用反射来检查类型: someObject.G
var b = someObject is MyClass; // without specifying <T>
不,不是,但您可以使用反射来检查类型:
someObject.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(MyClass<>))
不,不是,但您可以使用反射来检查类型:
someObject.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(MyClass<>))
这里有一点肯定被误解了,MyClass是一个“MyClass”类型,它使用类型“T”执行某些操作 事实并非如此 在创建实例之前,MyClass至少在概念上不存在。每当使用类型参数(比如MyClass)创建这样的实例时,它就会成为一个具体的类型。也就是说,MyClass或MyClass或MyClass都是具有相似名称的不同类。这些类型被称为具有泛型的构造类型。您可以重复使用MyClass名称,否则您将拥有具有不同名称的类。事实上,泛型和非泛型实现可以同时存在,并被视为不同的类型 例如
public class MyClass<T>
{
}
public class MyClass
{
}
private static void Main()
{
if(typeof(MyClass)==typeof(MyClass<>)) { }
else { }
}
如果您调试上面的类,您将在else部分结束
因此,在您声明MyClass之前,它根本不是一个类型。这里有一点肯定会被误解,那就是MyClass是一个“MyClass”类型,它使用类型“T”执行某些操作 事实并非如此 在创建实例之前,MyClass至少在概念上不存在。每当使用类型参数(比如MyClass)创建这样的实例时,它就会成为一个具体的类型。也就是说,MyClass或MyClass或MyClass都是具有相似名称的不同类。这些类型被称为具有泛型的构造类型。您可以重复使用MyClass名称,否则您将拥有具有不同名称的类。事实上,泛型和非泛型实现可以同时存在,并被视为不同的类型 例如
public class MyClass<T>
{
}
public class MyClass
{
}
private static void Main()
{
if(typeof(MyClass)==typeof(MyClass<>)) { }
else { }
}
如果您调试上面的类,您将在else部分结束
因此,在您声明MyClass之前,它根本不是一个类型。MyClass和MyClass是两个不相关的类型。您可以自己创建关系并获得指定的行为
class MyClass {}
class MyClass<T> : MyClass {}
如果指定MyClass和MyClass之间的关系,则您的is运算符将在上面的代码中工作。MyClass和MyClass是两种不相关的类型。您可以自己创建关系并获得指定的行为
class MyClass {}
class MyClass<T> : MyClass {}
如果您指定MyClass和MyClass之间的关系,那么您的is运算符将在上面的代码中工作。您考虑过继承吗?MyClass继承非泛型MyClass有意义吗?在这种情况下,您可以使用is运算符。您考虑过继承吗?MyClass继承非泛型MyClass有意义吗?在这种情况下,您可以使用is运算符。感谢您的尝试,很难编辑。感谢您的尝试,很难编辑。