Ik ken ze niet.
Voorbeeld: wat doet dit:
Visual Basic .NET:
1
| Dim i As Integer = Foo(j) |
a) leest het element uit op positie j in het array geretourneerd door property Foo
b) roept functie Foo aan met argument j
onbeholpen syntax. Komt puur door de ambiguiteit in de taal. Als ze nou andere brackets hadden gebruikt voor array indexing, was er geen probleem geweest.
[edit]
Ik geloof dat whoami nog niet overtuigd is...
Wat is de C# constructie dan van:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
| Private _targetPrices As Hashtable
....
Public ReadOnly Property TargetPrices(ByVal productId As Integer) As Double
Get
If Not Me._targetPrices.ContainsKey(productId) Then
Return 0
End If
Return DirectCast(Me._targetPrices.Item(productId), Double)
End Get
End Property |
* gorgi_19 runs.... 
Doet dit iets wat niet in C# kan?
C#:
1
2
3
4
5
6
7
8
9
10
11
| private Hashtable _targetPrices
public double TargetPrices(int productId)
{
double toReturn = 0M;
if(_targetPrices.Contains(productId))
{
toReturn = (double)_targetPrices[productId];
}
return toReturn;
} |
Denk nou niet dat methods die met 'Property' zijn gemarkeerd ineens nuttig zijn, want het is alleen maar onduidelijk. Oh, en dat 'ReadOnly'... er staat alleen een Get in. Wat zou het zijn... read, write of readwrite... Moeilijke taken voor zo'n compiler. Gelukkig staat er ReadOnly
Ik heb een functie gemaakt ipv een property, want een property is syntactical sugar: het resulteert in een getter en een setter.
Als ik de vb.net code decompile dan zie ik de code die Whoami opleverde. Als ik 3 verschillende properties bouw op deze manier met dezelfde parameter, dan krijg ik 3 keer een this[int productId], wat volgens mij problemen oplevert in C#, maar of dat de schuld is van C# weet ik niet. Ik bedoel, als je een method maken wilt, waarom doe je dat dan in een property structure?

Je kunt een property niet meegeven als parameter. De value die de property returned, die kun je meegeven als parameter. En dat is altijd by value, dit komt omdat een property onder water een get_Property en een set_Property method is. Parameters zijn alleen in indexers in C# toegestaan. Properties zijn niet bedoelt om te worden gebruikt met parameters.
Overigens begrijp ik niet echt wat je bedoelt met 'Afaik geeft een property by reference mee, een functie by value'
[
Voor 19% gewijzigd door
EfBe op 30-10-2005 10:45
]