Function (Member)

Declares or defines a member procedure returning a value

Syntax
   { Type | Class | Union } typename
      Declare [ Static | Const ] Function fieldname [calling convention 
      specifier] [ Alias external_name ] ( [ parameters ] ) [ ByRef ] As 
      datatype [ Static ]
   End { Type | Class | Union }

   Function typename.fieldname ( [ parameters ] ) [ ByRef ] As datatype [ 
   Export ]
      statements
   End Function

Parameters
   typename 
      name of the Type, Class, or Union
   fieldname 
      name of the procedure
   external_name
      name of field as seen when externally linked
   parameters 
      the parameters to be passed to the procedure
   calling convention specifier	
      can be one of: cdecl, stdcall or pascal

Description
   Function members are accessed with Operator . (Member Access) or 
   Operator -> (Pointer To Member Access) to call a member procedure that 
   returns a value (a reference can also be returned by specifying Byref As 
   return_type).  The procedure may optionally accept parameters either 
   ByVal or ByRef.  typename be overloaded  without explicit use of the 
   Overload keyword.

   typename is the name of the type for which the Function method is 
   declared and defined.  Name resolution for typename follows the same 
   rules as procedures when used in a Namespace.

   A hidden This parameter having the same type as typename is passed to 
   non-static member procedures.  This is used to access the fields of the 
   Type, Class, or Union.
   To access duplicated symbols defined as global outside the Type, add one 
   or preferably two dot(s) as prefix: .SomeSymbol or preferably ..
   SomeSymbol (or only ..SomeSymbol if inside a With..End With block).

   A Static (Member) may be declared using the Static specifier.  A 
   Const (Member) may be declared using the Const specifier.

   As for a normal Function, the return value of a Function member can be 
   ignored in the calling code.

Example
   #include "vbcompat.bi"

   Type Date

     value As Double

     Declare Static Function Today() As Date

     Declare Function Year() As Integer
     Declare Function Month() As Integer
     Declare Function Day() As Integer

   End Type

   Function Date.Today() As Date
     Return Type(Now())
   End Function

   Function Date.Year() As Integer
     Return ..Year(value)
   End Function

   Function Date.Month() As Integer
     Return ..Month(value)
   End Function

   Function Date.Day() As Integer
     Return ..Day(value)
   End Function

   Dim d As Date = Date.Today

   Print "Year  = "; d.Year
   Print "Month = "; d.Month
   Print "Day   = "; d.Day

Dialect Differences
   * Only available in the -lang fb dialect.

See also
   * Class
   * Function
   * Sub (Member)
   * Type

