Function (Member)

Declares or defines a member procedure returning a value

Syntax
	{ KeyPgTypeType | KeyPgClassClass | KeyPgUnionUnion } typename
		KeyPgDeclareDeclare [ KeyPgStaticMemberStatic | KeyPgConstMemberConst ] Function fieldname [calling convention 
		specifier] [ KeyPgAliasAlias external_name ] ( [ parameters ] ) [ KeyPgByrefFunctionByRef ] KeyPgAsAs 
		DataTypedatatype [ KeyPgStaticStatic ]
	End { KeyPgTypeType | KeyPgClassClass | KeyPgUnionUnion }

	Function typename.fieldname ( [ parameters ] ) [ KeyPgByrefFunctionByRef ] KeyPgAsAs DataTypedatatype [ 
	KeyPgExportExport ]
		statements
	End Function

Parameters
	typename 
		name of the KeyPgTypeType, KeyPgClassClass, or KeyPgUnion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: KeyPgCdeclcdecl, KeyPgStdcallstdcall or KeyPgPascalpascal

Description
	Function members are accessed with KeyPgOpMemberAccessOperator . (Member Access) or 
	KeyPgOpPtrMemberAccessOperator -> (Pointer To Member Access) to call a member procedure that 
	returns a value (a reference can also be returned by specifying KeyPgByrefFunctionByref As 
	return_type).  The procedure may optionally accept parameters either 
	KeyPgByvalByVal or KeyPgByrefByRef.  typename be overloaded  without explicit use of the 
	KeyPgOverload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 KeyPgNamespaceNamespace.

	A hidden KeyPgThisThis parameter having the same type as typename is passed to 
	non-static member procedures.  KeyPgThisThis is used to access the fields of the 
	KeyPgTypeType, KeyPgClassClass, or KeyPgUnion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 KeyPgWithWith..End With block).

	A KeyPgStaticMemberStatic (Member) may be declared using the Static specifier.  A 
	KeyPgConstMemberConst (Member) may be declared using the Const specifier.

	As for a normal KeyPgFunction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 CompilerOptlang-lang fb dialect.

See also
	* KeyPgClassClass
	* KeyPgFunctionFunction
	* KeyPgMemberSubSub (Member)
	* KeyPgTypeType

