수색…


POCO

가장 간단한 종류의 수업 중 일부는 POCO입니다.

// C#
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Birthday { get; set; }
}

F # 3.0에서는 C # 자동 속성과 비슷한 자동 속성이 도입되었지만,

// F#
type Person() = 
    member val FirstName = "" with get, set
    member val LastName = "" with get, set
    member val BirthDay = System.DateTime.Today with get, set

둘 중 하나의 인스턴스 생성은 비슷하지만,

// C#
var person = new Person { FirstName = "Bob", LastName = "Smith", Birthday = DateTime.Today }; 
// F#
let person = new Person(FirstName = "Bob", LastName = "Smith")

변경할 수없는 값을 사용할 수 있다면, 레코드 유형은 훨씬 더 관용적 인 F #입니다.

type Person = { 
    FirstName:string; 
    LastName:string; 
    Birthday:System.DateTime 
} 

그리고이 기록을 만들 수 있습니다 :

let person = { FirstName = "Bob"; LastName = "Smith"; Birthday = System.DateTime.Today }

기존 레코드를 지정하고 with 추가 with 필드 목록을 추가 with 다른 레코드를 기반으로 레코드를 만들 수도 있습니다.

let formal = { person with FirstName = "Robert" }

인터페이스 구현 클래스

클래스는 인터페이스의 계약을 충족시키는 인터페이스를 구현합니다. 예를 들어 C # 클래스는 IDisposable ,

public class Resource : IDisposable
{ 
    private MustBeDisposed internalResource;
    
    public Resource() 
    { 
        internalResource = new MustBeDisposed();
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing){
        if (disposing){
            if (resource != null) internalResource.Dispose();
        }
    }
}

F #에서 인터페이스를 구현하려면 타입 정의에서 interface 를 사용하고,

type Resource() = 
    let internalResource = new MustBeDisposed()

    interface IDisposable with
        member this.Dispose(): unit = 
            this.Dispose(true)
            GC.SuppressFinalize(this)

    member __.Dispose disposing = 
        match disposing with 
        | true  -> if (not << isNull) internalResource then internalResource.Dispose()
        | false -> ()


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow