Indexer Syntax

This forum is meant for questions and discussions about the X# language and tools
Post Reply
User avatar
orangesocks
Posts: 40
Joined: Thu Nov 12, 2015 2:41 pm

Indexer Syntax

Post by orangesocks »

Hi,
I'm converting some classes that I made in C# to X# as an exercise to better understand the syntax.
I'm stuck with the definition of an indexer. I looked in the documentation and I was not able to find anything.

In C# I would write:
public <TypeToReturn> this[<TypeToUse> <Value>]
{
get { <some code>; }
set { <some code>; }
}

What is the syntax to be used in X# ?

Regards Giuseppe
User avatar
Fabrice
Posts: 459
Joined: Thu Oct 08, 2015 7:47 am
Location: France

Indexer Syntax

Post by Fabrice »

Hi Giuseppe,
it can be something like :
PROPERTY SELF[ index AS TypeToUse ] AS TypeToReturn
GET
LOCAL item AS TypeToReturn
item := DoWhateverYouWant()
RETURN item
END GET
END PROPERTY

HTH
Fab
XSharp Development Team
fabrice(at)xsharp.eu
User avatar
orangesocks
Posts: 40
Joined: Thu Nov 12, 2015 2:41 pm

Indexer Syntax

Post by orangesocks »

Hi Fab
It worked like a charm. Thanks a lot.
User avatar
Chris
Posts: 4906
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Indexer Syntax

Post by Chris »

Guys,

One additional thing worth mentioning, is that X# supports also regular indexed (named) properties, in addition to indexers:

Code: Select all

FUNCTION Start() AS VOID 
	LOCAL IMPLIED o := TestClass{}
	? o:IndexedProperty[123]
RETURN

CLASS TestClass
	PROPERTY IndexedProperty[n AS INT]
		GET
			RETURN n * 2
		END GET
	END PROPERTY
END CLASS
I think those are not supported in c# at all, but we had to implement them in X# (and earlier in Vulcan) because VO does support them as well (and they are often very useful).

Chris
Chris Pyrgas

XSharp Development Team
chris(at)xsharp.eu
FFF
Posts: 1580
Joined: Fri Sep 25, 2015 4:52 pm
Location: Germany

Indexer Syntax

Post by FFF »

Chris,
out of curiosity, what's the difference to using a method - apart from braces vs. brackets ;-?
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
User avatar
Chris
Posts: 4906
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Indexer Syntax

Post by Chris »

Hi Karl,

Under the hood not much, both actually are implemented like methods internally. What changes is the syntax used to access/assign the indexer from user code:

Code: Select all

LOCAL IMPLIED o := TestClass{}
? o:IndexedProperty[123]
o:IndexedProperty[123] := 10 // if we add a SEtter to our property as well
Granted, you could recode things so that it uses a method (actually 2 methods, one for reading and one for writing), but in many cases the PROPERTY syntax is more intuitive. It's the same thing as with regular properties, what's the difference of having oWindow:Caption instead of oWindow:GetCaption() and oWindow:SetCaption(cNewCaption) ?

Chris
Chris Pyrgas

XSharp Development Team
chris(at)xsharp.eu
Post Reply