Reputation: 75
I have several Delphi Prism classes with indexed properties that I use a lot on my C# web applications (we are migrating a big Delphi Win32 system to ASP.Net). My problem is that it seems that C# can't see the indexed properties if they aren't the default properties of their classes. Maybe I'm doing something wrong, but I'm completely lost.
I know that this question looks a lot like a bug report, but I need to know if someone else knows how to solve this before I report a bug.
If I have a class like this:
TMyClass = public class
private
...
method get_IndexedBool(index: Integer): boolean;
method set_IndexedBool(index: Integer; value: boolean);
public
property IndexedBool[index: Integer]: boolean
read get_IndexedBool
write set_IndexedBool; default; // make IndexedBool the default property
end;
I can use this class in C# like this:
var myObj = new TMyClass();
myObj[0] = true;
However, if TMyClass is defined like this:
TMyClass = public class
private
...
method get_IndexedBool(index: Integer): boolean;
method set_IndexedBool(index: Integer; value: boolean);
public
property IndexedBool[index: Integer]: boolean
read get_IndexedBool
write set_IndexedBool; // IndexedBool is not the default property anymore
end;
Then the IndexedBool property becomes invisible in C#. The only way I can use it is doing this:
var myObj = new TMyClass();
myObj.set_IndexedBool(0, true);
I don't know if I'm missing something, but I can't see the IndexedBool property if I remove the default in the property declaration. Besides that, I'm pretty sure that it is wrong to have direct access to a private method of a class instance.
Any ideas?
Upvotes: 3
Views: 437
Reputation: 6085
Not beautiful or clean, but as a fast workaround you could make the indexed property accessors public. That way you can use them from C# to access the values.
Upvotes: 0
Reputation: 2036
I believe that C# 4.0 will support indexed properties but that anything before that will sadly not.
Unfortunately, what you are asking for is a limitation of C# and Not Delphi Prism. From the Delphi Prism Documentation wiki page on Delphi Prism vs C#:
C# can only access the default indexed properties. In Delphi Prism, you can define and use other indexed properties using their name.
This page also outlines other areas where Delphi Prism code includes unique or extended features over C# which might be useful in your port.
Upvotes: 1
Reputation: 1168
It's unfortunate but that's the only way C# lets you access index properties. It's a C# compiler limitation (vb.net should do it fine).
Upvotes: 0