문제
기본 클래스 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이 대부분의 경우가 아니라고 말했습니다.
편집 : 실제로, 클래스/종료 키워드는 그에 대한 필수가 아닙니다. 브라이언이 블로그에서 말했듯이 여기, f#는 일반적으로 정의되는 유형의 종류를 유추하여 이러한 토큰을 불필요/중복으로 만듭니다.
type D =
inherit B
new () = {
inherit B()
}
new (i : int) = {
inherit B(i)
}
new ((i,f) : int*single) = {
inherit B(i, f)
}
다른 팁
문서에서 : "기본 클래스 생성자에 대한 인수는 상속 절의 인수 목록에 나타납니다." 예를 들어:
type D(i: int) =
inherit B(i)
F#은 모든 생성자가 "1 차"생성자를 통과해야하기 때문에 다른 F# 생성자에서 다른 기본 클래스 생성자를 호출 할 수 있는지 확실하지 않습니다 (기본 생성자 인수는 전체 클래스의 범위에 있으므로 초기화되어야합니다. ). 귀하의 경우, 기본 클래스에 최대 생성자가 있으므로이를 벗어날 수 있습니다.
type D(i : int, f : float) =
inherit B(i, f)
new(i : int) = D(i, 0.0)
new() = D(0, 0.0)
그러나 최대 생성자가없는 기본 클래스의 경우 이것이 가능하지는 않습니다.
제휴하지 않습니다 StackOverflow