首页 / 知识
关于.net:为什么C#不支持在类构造函数中隐含的泛型类型?
2023-04-14 07:33:00

Why doesn't C# support implied generic types on class constructors?如果编译器可以推断出C#,则不需要您指定通用类型参数,例如:
这对于匿名类型是必需的,因为您不知道类型参数是什么(在智能感知中,它显示为 类级别的类型参数不允许您执行以下操作:
为什么C#不支持此类的类通用类型推断? 实际上,您的问题还不错。过去几年,我一直在使用通用编程语言,尽管我从来没有真正去开发它(并且可能永远也不会),但我已经对通用类型推论进行了很多思考,我的首要任务之一是始终允许在不必指定泛型的情况下构造类。 C#根本没有一套规则来实现这一目标。我认为开发人员从未想到将其包括在内的必要性。实际上,以下代码将非常接近您的主张并解决问题。所有C#需求都是一种附加的语法支持。
由于该代码实际上有效,因此我们证明了问题不只是语义之一,而仅仅是缺乏支持之一。我想我必须收回以前的帖子。 ;-)
因为它们通常是模棱两可的。相比之下,对于函数调用,类型推断是微不足道的(如果所有类型都出现在参数中)。但是,对于构造函数调用(为便于讨论,使用通用函数),编译器必须同时解析多个级别。一个级别是类级别,另一个级别是构造函数参数级别。我相信解决这个问题在算法上并不简单。凭直觉,我想说它甚至是NP完整的。 为了说明无法解决的极端情况,请想象以下类,并告诉我编译器应该做什么:
感谢Konrad,这是一个不错的答复(+1),但只是在此基础上进行扩展。 假设C#具有显式的构造函数:
您完全正确,无法推断出第一个构造函数。 现在回到课上
当然,如果我重新添加构造函数(及其替代类型),则会产生一个模棱两可的调用-就像无法解决常规方法重载一样。 |
最新内容
相关内容
linux进入编译器命令?
linux进入编译器命令?,系统,代码,环境,网上,基础,工作,工具,信息,时间,地址,linux终端下如何进行C语言编译1、在Linux下面,如果要编译一个C语言Python通用序列操作
Python通用序列操作,通用,步长,数据,位置,培训,数字,序列,索引,元素,操作,基本概念数据结构:是通过某种方式(例如对元素进行编号)组织在一起的Python构造函数该怎么写?
Python构造函数该怎么写?,代码,数据,概念,培训,信息,函数,方法,参数,实例,类型,在java中构造函数是与类同名的,而且会伴随着实例化的动作而执python 编译器
python 编译器,代码,培训,统一,异常,对象,字节,文件,编译器,类型,结果,执行pythondemo.py后,将会启动Python的解释器,然后将demo.py编译成一个python构造函数有什么用
python构造函数有什么用,代码,培训,名字,方法,参数,对象,函数,结尾,开头,实例,在创建类时,我们可以手动添加一个__init__()方法,该方法是一个特python构造函数和析构函数是一样的
python构造函数和析构函数是一样的吗,系统,培训,函数,状态,对象,方法,契机,时候,实例,初始化,python构造函数和析构函数:1、构造方法的使用很python用什么编译器
python用什么编译器,代码,平台,工具,环境,培训,灵活,时间,管理,系统,智能,Python的学习过程少不了IDE或者代码编辑器,或者集成的开发编辑器(ID关于Visual Studio:C ++编译器错误C
关于Visual Studio:C ++编译器错误C2371-WCHAR的重新定义,关于Visual Studio:C ++编译器错误C2371-WCHAR的重新定义,错误,项目,头文件关于c#:Instance构造函数设置一个静
关于c#:Instance构造函数设置一个静态成员,线程安全吗?,关于c#:Instance构造函数设置一个静态成员,线程安全吗?,构造函数,重构,想知道,用法,I在解析器,解释器和编译器上学习资源
在解析器,解释器和编译器上学习资源,在解析器,解释器和编译器上学习资源,学习,语言,解析器,解释器,Learning Resources on Parsers, In关于参数:有多少构造函数参数太多?
关于参数:有多少构造函数参数太多?,关于参数:有多少构造函数参数太多?,电子邮件,用户名,字段,业务逻辑,How many constructor arguments关于函数式编程:C#中的通用映射/减少
关于函数式编程:C#中的通用映射/减少列表扩展,关于函数式编程:C#中的通用映射/减少列表扩展,扩展程序,在编,模仿,我正,Generic Map/Reduc