2009-01-09 23 views

Odpowiedz

519

Symbol @ pozwala na użycie słowa zastrzeżonego. Na przykład:

int @class = 15; 

Powyższe prace, gdy nie będzie poniżej:

int class = 15; 
+17

Czym różni się od podkreślenia? –

+66

Za pomocą symbolu @ nazwa jest rejestrowana w zespole jako "klasa", a podkreślenie to "_class". Zatem, jeśli inny język .NET nie definiuje "klasy" jako słowa zarezerwowanego, mógłby użyć nazwy "klasa". –

+28

Jeśli użyłeś @class dla nazwy właściwości, możesz uzyskać do niej dostęp w następujący sposób: MyClass.class zamiast MyClass._class –

8

To pozwala używać C# słowa kluczowego jako zmienna. Na przykład:

class MyClass 
{ 
    public string name { get; set; } 
    public string @class { get; set; } 
} 
298

Symbol @ służy 2 celów w C#:

Po pierwsze, pozwala na korzystanie z zastrzeżonego słowa kluczowego jako zmienna jak ta:

int @int = 15; 

Druga opcja pozwala określasz ciąg bez ucieczki od jakichkolwiek znaków. Na przykład znak „\” jest znakiem ucieczki więc zazwyczaj trzeba by to zrobić:

var myString = @"c:\myFolder\myfile.txt" 
+16

W jaki sposób wpływa na ciągi było dokładnie to, czego szukałem. Dzięki! – Scott

+3

Dziękuję, użycie @ dla ciągów było dokładnie tym, czego szukałem. – Oliver

+2

Nadal potrzebujesz uciec podwójnymi cudzysłowami, podwajając je. –

50

Ważnym punktem, że pozostałe odpowiedzi zapomniał, to:

var myString = "c:\\myfolder\\myfile.txt" 

alternatywnie można to zrobić że "@ słowo kluczowe" jest wkompilowane w "słowo kluczowe" w CIL.

Więc jeśli posiadasz framework, który został napisany w, powiedzmy, F #, który wymaga zdefiniowania klasy z właściwością o nazwie "klasa", możesz to zrobić.

Nie jest to , że przydatne w praktyce, ale nie mając go, uniemożliwiłoby C# niektórych form współdziałania języka.

Zwykle widzę, że nie jest używane do współdziałania, ale aby uniknąć ograniczeń słów kluczowych (zwykle w przypadku lokalnych nazw zmiennych, gdzie jest to efekt tylko), tj.

private void Foo(){ 
    int @this = 2; 
} 

ale zdecydowanie odradzam to! Po prostu znajdź inną nazwę, nawet jeśli "najlepsza" nazwa zmiennej jest jedną z zastrzeżonych nazw.

+3

To chyba dobra rada. Rozumiem, że kwalifikator @ jest odpowiednikiem kwadratowego nawiasu VB.Net, więc odpowiednik VB będzie: dim [Klasa] jako Int32 = 15 –

+2

@Michael Jest to dokładnie odpowiednik składni kwadratowego nawiasu VB.NET. http://stackoverflow.com/questions/6639688/using-keywords-as-identifiers-in-f zwraca uwagę, że F # używa podwójnych odcisków wokół identyfikatora w tym samym celu. – ClickRick

+1

Jako późny komentarz - "nie, że to jest TAKIE użyteczne" - w MVC jest to sposób, w jaki można przekazać właściwość o nazwie "klasa" do renderowania e - która zamienia się w html "klasa", aby zdefiniować klasę CSS. – TomTom