首页 / C# / 从F#调用重载的C#方法
从F#调用重载的C#方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从F#调用重载的C#方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2192字,纯文字阅读大概需要4分钟。
内容图文
![从F#调用重载的C#方法](/upload/InfoBanner/zyjiaocheng/809/eb9a1cbce4a24cf1bddadab17a75d353.jpg)
在SO上有一些类似的问题,但我似乎无法找到我正在寻找的东西.
有一个C#库(OpenCVSharp)声明一个像这样的重载方法:
public static void CalcHist(Mat[] images,
int[] channels, InputArray mask,
OutputArray hist, int dims, int[] histSize,
Rangef[] ranges, bool uniform = true, bool accumulate = false)
{
....
}
public static void CalcHist(Mat[] images,
int[] channels, InputArray mask,
OutputArray hist, int dims, int[] histSize,
float[][] ranges, bool uniform = true, bool accumulate = false)
{
....
}
即,仅通过“范围”参数的类型来改变.
我似乎无法调用此方法,即使使用tupled参数样式,包括可选参数和添加一大堆类型注释:
let images = [|new Mat()|]
let hist = OutputArray.Create(new Mat());
let hdims = [|256|];
let ranges = [| new Rangef(0.f,256.f) |];
Cv2.CalcHist<Mat [] * int [] * InputArray * OutputArray * int * int [] * Rangef [] * bool * bool>
(images,
[|0|],
null,
hist,
1,
hdims,
ranges,
true,
false)
错误是“错误4成员或对象构造函数’CalcHist’从这个代码位置无法访问9个参数.方法’CalcHist’的所有可访问版本都有9个参数”
有什么办法我可以用F#调用这个方法吗?
解决方法:
您选择用于指定参数类型的语法实际上不适用于指定参数类型.该语法用于指定泛型函数或类型的泛型参数:
let imGeneric<'t, 'u> (x: 't, y: 'u) = ...
let callGeneric = imGeneric<int, string> (5, "abc")
但是,当然,大多数情况下,F#编译器可以为您推断泛型参数,因此您不需要经常明确指定它们:
let imGeneric (x, y) = ...
let callGeneric = imGeneric (5, "abc")
您的Cv2.CalcHist方法不是通用的.删除泛型参数,它应该工作正常:
Cv2.CalcHist( images, [|0|], null, hist, 1, hdims, ranges, true, false )
上面的工作,因为编译器已经知道范围有类型Rangef [],所以它可以选择正确的重载,而无需你做任何额外的工作.
但有时真的有必要明确指定一些(或所有)参数的类型.在这些情况下,您可以正确指定类型:
Cv2.CalcHist(
images, [|0|], null, hist, 1, hdims,
(ranges : Rangef []),
true, false )
注意额外的括号(范围:Rangef []).没有它们,类型注释不仅适用于范围,而且适用于整个图像元组,[| 0 |],null,hist,1,hdims,范围,这将导致编译时错误,因为这样的元组清楚不能有类型Rangef [].
或者,您可以在调用之前的任何位置修复值的类型:
let ranges: Rangef [] = getRanges()
Cv2.CalcHist( images, [|0|], null, hist, 1, hdims, ranges, true, false )
这将产生同样的效果.编译器实际上只需要知道类型,它并不关心它定义的确切位置,只要它在需要它之前.
内容总结
以上是互联网集市为您收集整理的从F#调用重载的C#方法全部内容,希望文章能够帮你解决从F#调用重载的C#方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。