Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB 2008] Optional-parametri structure-tyyppisenä

vesimies [16.04.2009 22:19:43]

#

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.

Metabolix [16.04.2009 23:30:12]

#

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.

Grez [16.04.2009 23:31:43]

#

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.

vesimies [16.04.2009 23:42:04]

#

Siltähän se kyllä vaikuttaa. Ei kai tässä auta muu kuin tehdä overloadia.

Edit: En kyllä keksi minkä tyyppinen Structure kävisi.

vesimies [17.04.2009 17:09:00]

#

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.

Grez [17.04.2009 17:34:17]

#

Siis alpha arvolla 0 se on täysin läpinäkyvä.

vesimies [17.04.2009 17:40:23]

#

Silloinhan se on käytännössä

Nothing

;)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta