Za to může type inference, tedy odvození typu pole z datových typů prvků. VB se podívá na první prvek a vidí, že to je string. Pak se podívá na druhý a vidí, že to je datum, ale existuje automatická konverze na string (protože Option Strict je vypnutý), tak z něj udělá string. To samé u třetího a čtvrtého prvku, protože existuje automatická konverze stringu na ty datové typy, tak to zkonvertuje. Pokud byste byl v C# nebo měl zapnutý Option Strict, tak se kompilátor zase podívá na první prvek a vidí tam string, u druhého prvku ale neexistuje automatická konverze na ten typ, takže vezme společného předka obou těch typů a to je Object. Nic jiného v tom není. Ve VB.NET se dá celkem dobře psát i s vypnutým Option Strict, jen si člověk musí uvědomit, kde všude přijde na řadu automatická konverze. Je občas celkem zapeklité uvědomit si, co to kdy udělá, takže doporučuju buď všude ty typy expicitně uvádět, nebo Option Strict zapnout (tím se ale člověk připraví o část té "krásy", kterou VB nabízí - některé situace vytvořené automatickou konverzí jsou velmi hezké, na druhou stranu z praktického hlediska a kvůli srozumitelnosti je Option Strict určitě lepší volba).
|