当前位置: 首页 > 编程语言 > C#

不太常见的泛型?C#泛型算法共享

时间:2023-04-10 20:52:58 C#

lessgeneric泛型的可能解决方案?C#泛型算术的可能解决方案目前,C#中的泛型不允许任何理智的方式来执行算术。有一些笨拙的解决方法,但它们都不是很简洁,而且它们都会降低性能。根据这次采访,不可能实现具有算术类型的接口,因此建议采用这样的解决方法。但是你可以做的是让你的矩阵作为计算器的参数,在计算器中,有一个方法叫做multiply。您实现它,然后将其传递给Matrix。为什么我必须告诉高级编程语言如何添加和递增数字?[根据大众需求进行编辑]为什么不简单地允许将泛型限制为类型列表?例如。classMatrixwhereT:int,long,float,double语法当然可以不同。但是编译器只需要检查类型是否在列表中,并且使用的运算符适用于所有类型,这应该比显然太难的接口建议简单得多。有什么明显的原因无法实施吗?我想你正在寻找函数式编程语言在OOP中的能力。如果是这种情况,则使用FP。例如,在Scala中您可以替换运算符,因此您现在可以对矩阵进行加法或乘法运算。各种语言都是这种情况,但并非所有OOP语言都是如此。为什么在不清楚如何添加或增加泛型时可以添加泛型?例如,如果我有一个对数类,那么乘法就是将数字相加,但是,编译器怎么知道的呢?在C#中,您可以执行运算符重载,这解决了您抱怨的问题:http://msdn.microsoft.com/en-us/library/aa288467%28VS.71%29.aspxC#团队决定如何做generics,它不应该像上面的例子那样处理数学,但它们确实允许你帮助编译器知道如何做数学,所以首先责备他们不征求他们的意见是非常危险的,因为已经做出了决定,泛型like它们是一样的。我相信现在不会改变。为什么不简单地允许将泛型限制为类型列表?因为当时还不普及。泛型扩展了整??个类型系统的表现力;它们不是廉价的搜索和替换机制,而是C++模板。有什么明显的原因无法实施吗?我否认这个问题的前提。如果我们想违背泛型的基本设计原则,这是可以做到的。哎呀,我可以在不到一个月的时间内完成它,我很确定,给定时间和预算。但是,我还有其他优先事项。这是非常愚蠢的。好吧,当我周一见到Anders时,我一定会告诉他来自Internet的MikeK认为他的想法很愚蠢。他甚至暗示C#开发人员的数量是有限的。事实上,我很清楚我个人的局限性。我对编程语言的设计和实现还有很多了解。我还注意到,我们受到预算以及我们无法控制的市场力量以及许多其他因素的限制。最后,让我借此机会指出,对可以回答您问题的人进行人身侮辱会破坏您回答的目的。如果您对此主题感兴趣,请考虑阅读我关于该主题的短文:http://blogs.msdn.com/ericlippert/archive/2008/02/20/how-to-not-get-a-question-answered.aspx泛型不是C++模板。编译器将只允许对可验证泛型类型参数的操作对这些参数有效,因为要使用的确切类型在JIT编译之前不会被插入。C++在编译时进行插值,并不关心某个操作是否对T的每个可能值都有效,只要它对您实际使用的特定T值有效即可。此外,像T:int这样的约束没有意义,因为不能从int派生任何类型,因为int是一个结构。唯一遵守此约束的类型是int本身。如果您知道您的类型将始终是int,那么泛型就变得毫无意义。我建议(请原谅我有限的知识,如果这对任何人来说听起来很迟钝)使用它们各自的关键字来实现模板和通用函数。在阅读了所有帖子(是的所有帖子)之后,我不得不说我同意这两种观点:泛型永远不应该成为“廉价的搜索和替换机制,而是C++模板”,但是当两种类型的函数变得烦人时当你必须实现它时:P也许一个IArithmetic接口说明需要实现哪些运算符可以用来使约束更紧凑?添加此支持会增加额外的复杂性,但会带来非常小的额外好处,原因在访谈中已明确说明。如果您知道如何设计和编写编译器,则可以(在其他一些论坛中)讨论它的真实性或虚假性,而不是它是“愚蠢”还是“有限”的语言开发人员……。以上就是C#学习教程:不太常见的泛型?C#genericsarithmetic的一种可能的解决方案所有内容分享,如果对你有用,需要了解更多的C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: