2010-12-20 5 views
5

Jednym z zastosowań dla typu var w C# wydaje się być skrót/upraszczanie/zapisywanie niepotrzebnego pisania. Jedną z rzeczy, którą rozważałem jest:Czy jest akceptowany przy użyciu var jako "skrótów" w języku C#?

MyApp.Properties.Settings.Default.Value = 1;

To ton niepotrzebnego kodu. Alternatywą dla tego deklaruje:

using MyApp.Properties; 

- lub -

using appsettings = MyAppp.Properties.Settings; 

prowadzi do: appsettings.Default.Value = 1 lub Settings.Default.Value = 1

Abit lepiej , ale chciałbym, aby było jeszcze krótko:

var appsettings = MyFirstCSharpApp.Properties.Settings.Default; 
appsettings.Value=1; 

Wreszcie jest wystarczająco krótki i może być używany do innych irytująco długich również wzywa, ale czy jest to akceptowany sposób robienia tego? Zastanawiam się, czy "var skrótu" zawsze będzie wskazywał na istniejącą instancję tego, co robię skrót? (oczywiście nie tylko ustawienia jak w tym przykładzie)

+2

Pobierz resharper. –

+0

możliwy duplikat słowa [użycie słowa kluczowego var w języku C#] (http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c) – BrunoLM

+0

Spojrzałem na wtyczkę, czy mógłbyś być bardziej konkretny w jak to pomaga? Zakładam, że mogę dodawać fragmenty rzeczy, dla których chcę skrótów, ale to nie będzie "na czasie" w taki sam sposób jak pomoc var. –

Odpowiedz

7

Jest to akceptowalny kod, który kompilator podejmie i będzie wiedział, co z nim zrobić. Logiczne jest, że kod jest skracany później. To naprawdę nie różni się od definiowania typu zmiennej (int/bool/cokolwiek), zamiast wypowiadania var. Kiedy jesteś w studio, umieszczenie myszy na zmiennej daje jej skompilowany typ, więc nie powinno być z tym żadnego poważnego problemu. Niektórzy mogą to nazwać leniwym, ale lenistwo jest matką wynalazków. Dopóki twój kod nie stanie się nieczytelny, nie widzę, jak to by było dużym problemem.

+2

A jeśli twoje metody i klasy są zgodne z SRP (Zasada Odpowiedzialności Pojedynczej) i są krótkie i na temat, a twoje zmienne są wyraźnie nazwane i zadeklarowane blisko jednego lub dwóch wierszy kodu, które ich używają, nigdy nie powinno być żadnych niejednoznaczności o czym jest zmienna lub jaki to jest ... –

1

Nie ma w tym nic złego, o ile kod jest czysty.

1

W rzeczywistości, var jest coraz częściej używany do tego: skrócenie kodu.

Specjalnie w przypadku

MyClass myClass = new MyClass(); 

Która jest bardzo jasne, wystarczy za pomocą

var myClass = new MyClass(); 

I btw, ReSharper pomaga egzekwować że zmienna jest używana wszędzie może być!

+0

to właśnie robi reharper z var, dziękuję! –

+0

Ten post nie jest dobrym przykładem dla OP. W przypadku VdesmedT typ jest jawny, w przypadku OP typ nie jest. –

1

Wydaje mi się to w porządku, może zwiększyć czytelność, zwłaszcza jeśli używasz tej długiej .notowanej składni wiele razy.

Z jednej strony, jeśli korzystasz z właściwości indeksowanej lub automatycznie wygenerowanej właściwości (która działa w locie dla GETTER) wiele razy, może nastąpić trafienie wydajności dla każdego dostępu do tej właściwości. To jest mikrooptymizacja, więc prawdopodobnie nie powinieneś się o to martwić.

+0

dzięki dobrze wiedzieć, to chyba rzadko jest problem, ale dobrze wiedzieć! –

1

Pamiętaj tylko, że zmienne statyczne, do których się odwołujesz, nie zmieniają się pod tobą. Na przykład, następujące by złamać „skrót”:

var appsettings = MyFirstCSharpApp.Properties.Settings.Default; 
MyFirstCSharpApp.Properties.Settings.Default = new DefaultSettings(); // new reference 
appsettings.Value=1; 

Oczywiście, ja nie sugeruję, byś kiedykolwiek napisać kod, który wykonuje to, ale mówimy o zmiennych globalnych tutaj ... nigdzie żadnego kodu może zmienić to odniesienie. Przechowywanie odwołań w appsettings MOŻE być niebezpieczne w takich przypadkach ...jedna z wielu pułapek sprzężenia ze statycznymi zmiennymi, IMO.

Powiązane problemy