本文介绍了泛型,约束和重载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我想提供两个具有相同名称的通用方法和 相同的参数,但具有不同的约束条件,例如: void Explore< T>(T [] a,T [] b)其中T:struct {} void探索< T>(T [] a,T [] b)其中T:class {} 值类型应使用第一种方法和引用类型 第二种方法。但是,这不会编译,因为C#编译器 报告已经有一个定义了相同名称的方法 和相同的参数。 约束似乎没有被考虑在内!? 还有其他一些处理价值和参考类型的方法 in不同的方法自动?我不能在C#中看到一个带有泛型的b 。但我可能忽视了一些事情。 Pierre http://www.creativedocs.net/ 解决方案 这只是一个优化问题: - 如果它是类类型,那么我必须做一些检查以确定 参数是否为空;我可以比较参考相等和需要 在调用object时是谨慎的.Equals(对象) - 如果是结构类型,我不要不需要检查null和Equals可以 无需事后使用(甚至System.IEquatable< T> .Equals) 你看到了理念。如果我想在我的方法中进行一些空检查,那么我不能使用一个泛型类型,其中T未被指定为类 类型。如果我这样做,我就不能将值类型传递给我的方法... Pierre I''d like to provide two generic methods with the same name andthe same arguments, but with different constraints, such as:void Explore<T>(T[] a, T[] b) where T : struct { }void Explore<T>(T[] a, T[] b) where T : class { }The value types should use the first method and the reference typesthe second method. However, this won''t compile, as the C# compilerreports that there is already a method defined with the same nameand the same arguments.Constraints seem not to be taken in account !?Is there some other means of handling value and reference typesin different methods automatically ? I can''t see one with genericsin C#. But I might have overlooked something.Pierre http://www.creativedocs.net/ 解决方案It''s just an optimization issue:- If it is a class type, then I have to do some checking to see if theparameters are null; and I can compare for reference equality and needto be prudent when calling object.Equals(object)- If it is a struct type, I don''t need to check for null and Equals canbe used without afterthought (or even System.IEquatable<T>.Equals)You see the idea. If I want to do some null checking in my method, Ican''t use a generic type for which T is not specified to be of classtype. And if I do, I can''t pass value types to my method...Pierre 这篇关于泛型,约束和重载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-22 19:57