Mikäs on kun ei esim. Color-tyyppiä (Structure) voi laittaa vapaavalintaiseksi parametriksi?
Private Sub Jotain(Optional ByVal väri As Color = Nothing) '... End Sub
Virheilmoitus: "Optional parameters cannot have structure types."
Kuitenkin ohjeet toteaa aiheessa Parameter List:
Visual studio Documentation kirjoitti:
defaultvalue
Required for Optional parameters. Any constant or constant expression that evaluates to the data type of the parameter. If the type is Object, or a class, interface, array, or _structure_, the default value can only be Nothing.
En tiedä asiasta, mutta oletko kokeillut muuttaa parametria viittaukseksi (ByRef)? Muiden kielten perusteella tuntuisi omituiselta, että itse rakenteen arvo voisi olla Nothing. Viittaukseen tämä sopisi paremmin.
Voin kertoa, että ByRef ei auta. Ilmeisesti tuohon kelpaa vain tietynlaiset structuret, tai sitten tuossa ohjeessa on vikaa enemmänkin.
Melkeinpä veikkaisin, että dokumentaation kirjoittajalla on vaan käynyt kämmi. Tai sitten siinä tarkoitetaan, että struktuurin voi välittää objektina, jolloin se tietenkin toimii, mutta todella pyllystä. Overload on hyvä vaihtoehto.
Siltähän se kyllä vaikuttaa. Ei kai tässä auta muu kuin tehdä overloadia.
Edit: En kyllä keksi minkä tyyppinen Structure kävisi.
Vielä hieman tästä Structure-asiasta.
Metabolix kirjoitti:
Muiden kielten perusteella tuntuisi omituiselta, että itse rakenteen arvo voisi olla Nothing. Viittaukseen tämä sopisi paremmin.
Niin, se on kyllä aika omituista mutta VB:ssä tämä on mahdollista. Tosin se tarkoittaa vain sitä että kaikki Structuren jäsenet on default-arvoina (eli integerit nollia jne). Ei tätä paljon kannata käyttää kun siitä tulee vain sekaannusta. Tässä pieni esimerkki asiasta, käytetään nyt edelleen Color-tyyppiä esimerkkinä.
Public Sub StructTesti() Dim väri As Color = Nothing Dim sinistä As Byte = väri.B ' -> 0 Dim eiMitään As Boolean = (väri = Nothing) ' - > True väri = Color.DarkOliveGreen eiMitään = (väri = Nothing) ' -> False väri = New Color() ' ARGB kaikki 0 eli mustahan se eiMitään = (väri = Nothing) ' -> True! End Sub
Edit. Onkohan se sittenkään ihan sama kuin musta, yleensä valmiissa väreissä näkyy olevan alfa=255 (en ole oikein perillä alfa-arvosta). No yhtä hyvin voi ajatella Structurea Point(0, 0), sehän on ihan oikea piste eikä mikään Nothing
.
Siis alpha arvolla 0 se on täysin läpinäkyvä.
Silloinhan se on käytännössä
Nothing
;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.