수색…
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