在C#中,这肯定是可能的,因为这个可编译的例子可以显示:
static void Teste(int x) { }
static void Teste(ref int x) { }
static void Teste()
{
int i = 0;
Teste(i);
Teste(ref i);
}
Run Code Online (Sandbox Code Playgroud)
但是可以使用构造函数在C++(/ CLI)中完成吗?请参阅以下示例:
class Foo
{
Foo(int bar)
{
// initializing "Foo" instance...
}
Foo(int &bar)
{
// initializing "Foo" instance...
}
//...
}
Run Code Online (Sandbox Code Playgroud)
虽然这个类确实使用这些构造函数进行编译,但是当我应用另一个时,我无法看到如何选择,也就是说,调用是ambiguos,因为在C#中没有为此目的知道的关键字"ref".我在构造函数中尝试了它,其中名称必须与类相同(当然我可以添加一个无用的参数,但我想知道我是否不能这样做).
顺便说一句,我用谷歌搜索,只有"通过参考和价值之间有什么区别?" 但没有像这样覆盖超载.而且我想作为变通方法,我可以使用指针,这要归功于"取地址"(&); 或者,如上所述,还有一个额外无用的参数.但我想知道的是:我可以像这样重载(通过ref/by value)吗?
提前致谢,
我试图System.Windows.Forms.Form在F#中绘制非自定义(我的意思是,只是创建默认表单类的实例,而不是我可以创建的派生类的实例).
我创建了一个自定义表单,但我不需要也不想要一个新的复杂结构,所以我删除了它,它简化了代码; 这么多,它停止显示图像.
问题必须出在我创建的函数中,即在另一个F#项目中.我已经创建它(函数conect)来按照它们提供的顺序连接点,不同的是System.Drawing.Graphics.DrawLines,它以某些其他顺序在点之间绘制线条为什么还没有注意到(可能是从右到左,从上到下,因为点是表示).
Programa.fs相关代码片段:
let pen = new Pen(brush = Brushes.Black, width = 1.0f)
let original =
([|new PointF(50.0f, 50.0f); new PointF(100.0f, 50.0f)|])
use form1 = new Form(Width = 400, Height = 400, Text = "Fractais (Teste - Windows Forms)")
form1.Paint.Add(
fun e -> // (1)
original
|> List.ofArray
|> Base.applyFractal 1uy Base.fractalFunc1
|> Base.conect e.Graphics pen)
Run Code Online (Sandbox Code Playgroud)
如果在lambda表达式而不是写入的内容中e.Graphics.DrawLines(pen, original),它将在列表中的点之间绘制一条简单的线.
以下是整个解决方案中Basework中的故障排除方法:
let conect (gr:Graphics) (pen:Pen) (points:PointF list) =
let rec …Run Code Online (Sandbox Code Playgroud) 前段时间我注意到VS2012 for Web中的"Watch"窗口不适用于FSharp中的默认功能.例如,cos someValue不起作用,也没有在函数的开头插入let _cos = cos或使用的解决方法.该错误类似于"当前上下文中不存在cos"或"_cos在当前范围内无效"等.let _cos x = cos x_cos(someValue)
我应该更改某些设置还是这是一个意外的错误?当然,我可以声明我需要观察的所有结果,但这有点开销,这是非常不切实际的.我该怎么做才能解决这个问题?