题
我找不到用于编码继承基类B(用C#编写)的类型D和除基类隐式构造函数之外的构造函数的正确语法:
C#代码:
public class B
{
private int _i;
private float _f;
public B()
{
_i = 0;
_f = 0.0f;
}
public B(int i)
{
_i = 0;
_f = 0.0f;
}
public B(int i, float f)
{
_i = i;
_f = f;
}
}
F#代码:
type D() =
inherit B()
//how to inherit from other constructors ?
由于
解决方案
我找到了一种方法,这要归功于博客!
type D =
class
inherit B
new () = {
inherit B()
}
new (i : int) = {
inherit B(i)
}
new ((i,f) : int*single) = {
inherit B(i, f)
}
end
是的,这有点麻烦,但就像Brian说的那样,这不是大多数情况。
编辑: 实际上,类/结束关键字并不是强制性的(因此我收回了我所说的关于繁琐的内容)。 正如Brian在他的博客这里所说,F#通常会推断被定义的类型,使这些令牌不必要/多余。
type D =
inherit B
new () = {
inherit B()
}
new (i : int) = {
inherit B(i)
}
new ((i,f) : int*single) = {
inherit B(i, f)
}
其他提示
来自docs:"基类构造函数的参数出现在inherit子句的参数列表中。例如:
type D(i: int) =
inherit B(i)
我不确定你是否可以从不同的F#构造函数调用不同的基类构造函数,因为F#要求所有构造函数都通过“primary”构造函数。构造函数(因为主构造函数参数在整个类的范围内,因此必须初始化它们)。在你的情况下,你可以逃脱它,因为你的基类有一个最大的构造函数:
type D(i : int, f : float) =
inherit B(i, f)
new(i : int) = D(i, 0.0)
new() = D(0, 0.0)
但对于没有最大构造函数的基类,我不确定这是否可行。
不隶属于 StackOverflow