F #-클래스
클래스는 속성, 메서드 및 이벤트를 가질 수있는 개체를 나타내는 형식입니다. '응용 프로그램에서 동작, 프로세스 및 모든 개념 엔터티를 모델링하는 데 사용됩니다.'
통사론
클래스 유형을 정의하는 구문은 다음과 같습니다.
// Class definition:
type [access-modifier] type-name [type-params] [access-modifier] ( parameter-list ) [ as identifier ] =
[ class ]
[ inherit base-type-name(base-constructor-args) ]
[ let-bindings ]
[ do-bindings ]
member-list
...
[ end ]
// Mutually recursive class definitions:
type [access-modifier] type-name1 ...
and [access-modifier] type-name2 ...
...
어디,
그만큼 type-name유효한 식별자입니다. 이에 대한 기본 액세스 수정자는 다음과 같습니다.public.
그만큼 type-params 선택적 일반 유형 매개 변수를 설명합니다.
그만큼 parameter-list생성자 매개 변수를 설명합니다. 기본 생성자의 기본 액세스 수정자는 다음과 같습니다.public.
그만큼 identifier 옵션과 함께 사용 as 키워드는 인스턴스 변수에 이름을 제공합니다. self-identifier, 유형의 인스턴스를 참조하기 위해 유형 정의에서 사용할 수 있습니다.
그만큼 inherit 키워드를 사용하면 클래스의 기본 클래스를 지정할 수 있습니다.
그만큼 let 바인딩을 사용하면 클래스에 로컬로 필드 또는 함수 값을 선언 할 수 있습니다.
그만큼 do-bindings 섹션에는 객체 생성시 실행되는 코드가 포함됩니다.
그만큼 member-list 추가 생성자, 인스턴스 및 정적 메서드 선언, 인터페이스 선언, 추상 바인딩, 속성 및 이벤트 선언으로 구성됩니다.
키워드 class 과 end 정의의 시작과 끝을 표시하는 것은 선택 사항입니다.
클래스 생성자
생성자는 클래스 유형의 인스턴스를 만드는 코드입니다.
F #에서 생성자는 다른 .Net 언어와 약간 다르게 작동합니다. 클래스 정의에서 기본 생성자의 인수는 매개 변수 목록으로 설명됩니다.
생성자의 본문은 let 과 do 바인딩.
새 키워드를 사용하여 추가 생성자를 추가하여 구성원을 추가 할 수 있습니다.
new (argument-list) = constructor-body
다음 예제는 개념을 설명합니다-
예
다음 프로그램은 클래스의 객체가 생성되는 동안 라인의 길이를 계산하는 생성자와 함께 라인 클래스를 생성합니다.
type Line = class
val X1 : float
val Y1 : float
val X2 : float
val Y2 : float
new (x1, y1, x2, y2) as this =
{ X1 = x1; Y1 = y1; X2 = x2; Y2 = y2;}
then
printfn " Creating Line: {(%g, %g), (%g, %g)}\nLength: %g"
this.X1 this.Y1 this.X2 this.Y2 this.Length
member x.Length =
let sqr x = x * x
sqrt(sqr(x.X1 - x.X2) + sqr(x.Y1 - x.Y2) )
end
let aLine = new Line(1.0, 1.0, 4.0, 5.0)
프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.
Creating Line: {(1, 1), (4, 5)}
Length: 5
바인딩하자
클래스 정의의 let 바인딩을 사용하면 F # 클래스에 대한 전용 필드 및 전용 함수를 정의 할 수 있습니다.
type Greetings(name) as gr =
let data = name
do
gr.PrintMessage()
member this.PrintMessage() =
printf "Hello %s\n" data
let gtr = new Greetings("Zara")
프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.
Hello Zara
Greetings 클래스에 대해 자체 식별자 gr 사용에 유의하십시오 .