Классы — это типы, которые представляют объекты, которые могут иметь свойства, методы и события. «Они используются для моделирования действий, процессов и любых концептуальных объектов в приложениях».
Синтаксис
Синтаксис для определения типа класса выглядит следующим образом:
// 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 ... ...
Куда,
-
Имя типа — это любой допустимый идентификатор. Модификатор доступа по умолчанию для этого является публичным .
-
Тип-параметры описывают необязательные параметры универсального типа.
-
Список параметров описывает параметры конструктора. Модификатор доступа по умолчанию для основного конструктора — public .
-
Идентификатор, используемый с необязательным ключевым словом as, задает имя переменной экземпляра или самоидентификатор, который можно использовать в определении типа для ссылки на экземпляр типа.
-
Ключевое слово наследия позволяет вам указать базовый класс для класса.
-
Привязки let позволяют объявлять поля или значения функций, локальные для класса.
-
Раздел do-bindings содержит код, который должен быть выполнен при построении объекта.
-
Список членов состоит из дополнительных конструкторов, объявлений экземпляра и статического метода, объявлений интерфейса, абстрактных привязок, а также объявлений свойств и событий.
-
Ключевые слова class и end , обозначающие начало и конец определения, являются необязательными.
Имя типа — это любой допустимый идентификатор. Модификатор доступа по умолчанию для этого является публичным .
Тип-параметры описывают необязательные параметры универсального типа.
Список параметров описывает параметры конструктора. Модификатор доступа по умолчанию для основного конструктора — public .
Идентификатор, используемый с необязательным ключевым словом as, задает имя переменной экземпляра или самоидентификатор, который можно использовать в определении типа для ссылки на экземпляр типа.
Ключевое слово наследия позволяет вам указать базовый класс для класса.
Привязки let позволяют объявлять поля или значения функций, локальные для класса.
Раздел do-bindings содержит код, который должен быть выполнен при построении объекта.
Список членов состоит из дополнительных конструкторов, объявлений экземпляра и статического метода, объявлений интерфейса, абстрактных привязок, а также объявлений свойств и событий.
Ключевые слова 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
Обратите внимание на использование самоидентификатора gr для класса Greetings .