可以容纳任意T类型的泛型类的变量类型是否存在根本缺陷
本文关键字:类型 存在 是否 缺陷 变量 泛型类 任意 | 更新日期: 2023-09-27 18:14:47
想象一下,当你创建一个泛型类MyClass<T>
时,一个接口MyClass<>
将自动生成,它具有MyClass<T>
的所有方法和属性,而不使用泛型参数或返回值。
这将使我从创建一次性接口的大量工作中节省下来,只是为了能够处理不同T
类型的通用对象。这个想法是否存在根本问题,导致它不是语言的一部分,或者只是"它没有被优先考虑或认为不重要"的情况?
当我说"接口"时,我并不是说这一定会被归类为并称为"接口"。这只是解释我意思的一种简单方式。一种抽象基类是另一种思考方式。如果这个特性存在,你不会认为它是生成的接口,只是例如,List<>
类型的变量当然可以保存任何泛型列表,如List<int>
或List<MyElement>
,然后你可以调用Count
, Clear()
, Capacity
等,因为这些不需要了解T
的类型。
只是为了弄清楚为什么这不是一个讨论线程,而是一个有明确答案的问题:
我的问题是,这个想法本身是否存在缺陷,使得它与类型安全不兼容或类似,或者它是否没有任何根本的缺陷。
用法示例:
我有一个泛型类,它包含一些依赖于泛型类型的数据和其他一些不依赖于泛型类型的数据。我有代码,我想重用,可以操作数据的非泛型部分。目前,我只能通过定义一个具有与泛型类相同成员的接口来实现这一点(减去使用泛型参数或返回值的成员)。当我不打算有多个实现时,必须定义这个接口似乎是多余的。如果有一种语言特性可以在不指定额外接口的情况下完成相同的工作,因为所需的信息已经在泛型类本身中,那么对于这种情况将是很方便的。
对于简单的情况,为泛型类提供一个非泛型基类是一种常见的方法。但是,如果MyClass<T>
已经从MyBaseClass<T>
继承,那么在两者之间放置非泛型类是不可能的,只能使用接口。
我的问题是,这个想法本身是否存在缺陷,使得它与类型安全不兼容或类似,或者它是否没有任何根本的缺陷。
不,考虑到你可以自己手工创建基类/接口,没有理由一个语言不能自动创建它。(是否应该完全是另一个问题。)
但是如果您在。net上构建这样的语言,您可能不能将其称为MyClass<>
,因为它已经用于表示开放泛型类型(这使得typeof(MyClass<>)
成为一个有效的表达式)。