Diskuze: Visual Studio 2012 nezná "var"
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 24 zpráv z 24.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Kľúčové slovo var môže byť myslím iba v metodách
Ok, jdu se zastřelit. Programování se věnuju už docela dlouho, ale tohodle jsem si nikde nevšiml. Asi to ví každý, protože jsem to nevygooglil. sdraco by mohl tohle vlákno smazat, ať mi to nekazí reputaci
Nič si z toho nerob, ja tiež už programujem dlho a tiež je niekde vlákno s tým istým obsahom.
var by se měl používat jen na věci kde dopředu přímo není znám datový typ.
V Javě se místo var
používá Object
. Pokud je
výsledek funkce značně polymorfní a potřebuji třeba jen metodu toString(),
tak to používám. Jinak bývá s analýzou toho objektu a následným
přetypováním dost práce.
Ty si řekl, že ho nemá používat a pak mi řekneš: "používej jen tehdy...". Proto mě to zarazilo.
Kit: v Javě nění nic jako GetType() nebo typeof() ?
V Javě je dokonce operátor instanceof
a funguje velmi dobře,
protože porovná třídu se všemi rodiči objektu. Praktičtější však je
použít interface, protože chyby v programu odhalíš už při kompilaci.
Snad z toho pochopíš i proč se nemá používat var
.
Proč zbytečně vytvářet nové třídy na to, že potřebuju prohrabat kolekci a sesbírat jen to co potřebuju, tím myslím LINQ dotazy... Já osobně si to bez klíčového slova var moc nedokážu představit
Můžeš místo var použít interface pro LINQ dotaz. Nebudeš pak muset přetypovávat.
No toje jedno, zrovna toto byla věc na kterou jsem se ptal docela dost lidí i kolegů a každý mi odpověděl, že je to namístě
Já mám pořád pocit, že nechápete (resp. spousta lidí tu nechápe), co var dělá...
Asi to také nechápu. var
vidím jen jako berličku pro ty,
kteří nevědí, jakého typu bude výsledek výrazu. Ať žije Python, u něj
je takové použití zcela běžné, dokonce tam to slovo var
ani
není. Přitom se také jedná o silně typovaný jazyk.
Proc bych mel psat cely nazev typu, kdyz si ho prekladac muze odvodit z druhe strany?
Nasledujici dva kody maji naprosto identicky vysledek a i poznam, jakeho typu promenna slovnik je, jen ten jeden zpusob ma kratsi zapis.
Dictionary<String, int> slovnik = new Dictionary<String, int>();
var slovnik = new Dictionary<String, int>();
Porad nechapu, co se vam na tom nelibi.
psát pokaždé kdy to jde datový typ je DOPORUČENÍ. Právě prto se tím všichni musí řídit.
Pokud by se tim kazdy musel ridit, nebylo by to doporuceni, ale spis treba pravidlo
Datovy typ poznas vetsinou z prave casti, takze tam v podstate je.
A odkud to doporuceni je? Potkal jsem ho jen jako doporuceni tykajici se psani MSDN napovedy (examplu), ale ne nijak obecne.
Aha, takže var
není ekvivalentem třídy Object
v
Javě. Je to syntaktický cukr.
using System;
using System.Collections.Generic;
static class Program {
static void Main() {
var slovnik = new Dictionary<String, int>();
Console.WriteLine(slovnik.GetType());
}
}
Výsledek:
System.Collections.Generic.Dictionary`2[System.String,System.Int32]
Přesně tak, je to jen syntaktický cukr. Jakmile jednou do proměnné var něco nacpeš, už tam žádný jiný typ nedostaneš, např.
var s="string";
s = 15;
Tě nenechá ani zkompilovat, protože hned na prvním řádku už ví, že proměnná s je typu string a také ti tak našeptává apod.
Jinak C# má vlastní třídu object, od které všechny objekty dědí a do které pak můžeš nacpat (téměř) cokoliv, to je ale něco úplně jiného.
C# ještě pak má typ dynamic, ten umí psí kusy a můžeš na něm třeba volat metody, o kterých v době kompilace ani nevíš a pokud ten objekt tu metodu nemá, tak dostaneš run-time výjimku.
Jo, to jsem vytrhl z projektu a bylo to pro celou třídu, ale kdyby to bylo jen jako nějaký result nějaké vyhledávací metody nebo tak, ukroj z toho to private
zrovna
private List<List<object>> foo = new List<List<object>>();
asi ne, var můžeš používat jen uvnitř metod, na členy třídy var použít nemůžeš
Áha, dám odpovědět a místo toho je edit -.- Znova to psát nebudu, aspoň satík zastihl mojí odpověď
Zobrazeno 24 zpráv z 24.