Nie mogę znaleźć "pola" wymienionego jako słowo kluczowe C# w dowolnym miejscu. Czy ktoś wie, na czym polega tło?Dlaczego potrzebuję "pole:" w mojej deklaracji atrybutu "[field: NonSerialized]"?
Odpowiedz
kompilator C# zwykle nie ma problemu z określeniem, do której części deklaracji ma zastosowanie atrybut. Mogę wymyślić trzy przypadki, w których można go użyć:
- Atrybuty dotyczące zespołu. Bardzo widoczne w AssemblyInfo.cs
- Atrybut zastosowany do zwracanej wartości deklaracji P/Invoke, [return: MarshalAs]
- Posiadanie tego atrybutu stosuje się do zmiennej wewnętrznej właściwości lub zdarzenia bez akcesorów. Twój przypadek.
NonSerializedAttribute ma zastosowanie wyłącznie do pól, można go używać w następujący sposób:
[NonSerialized]
public string myString;
i właściwości ... –
Nie tylko pola. –
Stoję poprawione. –
Jest to konieczne, na przykład, jeśli oznaczenie zdarzenia jako non-serializacji. Określa cel, do którego odnosi się atrybut.
Jest to część składni celu atrybutu. Z specification:
attribute-target:
field
event
method
param
property
return
type
Zobacz również dokumentacji dla NonSerializedAttribute
:
Aby zastosować klasę
NonSerializedAttribute
do zdarzenia, należy ustawić położenie atrybutu na polu, jak pokazano w poniższym kodzie C#.
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
Cóż, nie można serializować zdarzenia, a atrybut NonSerializedAttribute ma zastosowanie tylko do pól, więc nie rozumiem, co robi [pole: NonSerializedAttribute()], ale jestem także zaskoczony, że się kompiluje. –
Chodzi o to, że obiekty, które subskrybują to wydarzenie, będą traktowane jako część wykresu obiektów i serializowane, gdy obiekt zawierający zdarzenie zostanie zserializowany. Aby zapobiec ich serializacji, musisz przypisać zdarzenie z atrybutem "NonSerializedAttribute".Ale ponieważ 'NonSerializedAttribute' odnosi się tylko do pól, musisz oznaczyć go atrybutem target' target'. – jason
Yuriy, wierzę, że delegaci są wkomponowane w klasy, w którym to przypadku ich serializowanie powoduje ich szeregowanie za pomocą listy inwokacji. W tym przypadku musisz ustawić go jako [NonSerialized], ale spowoduje to błąd kompilacji, więc musisz określić pole: NonSerialized. Myślę, że naprawili to w .NET 3.5 jednak –
Ma to pozwala na ustawienie NonSerialized atrybut na polach, to jest przydatne w szeregowania zdarzeń.
Na przykład byłoby to daje błąd kompilacji
[NonSerialized]
public event SomeEventHandler SomeEvent;
Do tego trzeba użyć field:
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
Więcej o tym tutaj Fix - Delegates and Serialization
Ale oznaczasz to jako NonSerialized, a zdarzenia nie mogą być serializowane. –
Yuriy, wierzę w wydarzenia/delegacje .NET 3.0, które można szeregować jako klasy, więc musieliście podać je jako nieskonfigurowane –
Yuriy, proszę spojrzeć na poniższy link http://msdn.microsoft.com/en-us/ magazine/cc163902.aspx # S1 –
- 1. Dlaczego potrzebuję Atrybutu FromBody, gdy oczekuję danych w treści POST
- 2. Potrzebuję przeglądarki internetowej w mojej aplikacji komputerowej
- 3. Dlaczego nie mogę uzyskać wartości atrybutu mojej dyrektywy niestandardowej?
- 4. Dlaczego potrzebuję interfejsu?
- 5. Thymeleaf - Różnica między th: field = "$ {}" a th: field = "* {}"
- 6. Dlaczego nie mogę umieścić deklaracji "using" w deklaracji klasy?
- 7. Skąd wiadomo, czy potrzebuję "aktywacji HTTP WCF" w mojej aplikacji?
- 8. Elasticsearch enum field
- 9. Boolean Field w mysql db
- 10. Kiedy używać $ HTTP_POST_VARS ['field'] i $ _POST ['field']?
- 11. Dlaczego potrzebuję gwiazdki przed tablicą?
- 12. Dynamicznie zmieniaj wymagany parametr Field Field
- 13. Dlaczego potrzebuję gil dla PyMem_Malloc()?
- 14. Dlaczego potrzebuję podkreśleń w szybkim tempie?
- 15. Dlaczego jest różnica w deklaracji ogólnych list?
- 16. Dlaczego nielegalne rozpoczęcie deklaracji w Scali?
- 17. Korzyści [NonSerialized], gdy [Serializable] nie jest używana
- 18. Ustawienie nazwy atrybutu symfony 2 pole formularza
- 19. Model Django: NULLable field
- 20. Dodaj pole tekstowe pomocnika rails do atrybutu?
- 21. Dlaczego Standard zabrania przyjacielskich deklaracji specjalizacyjnych częściowych?
- 22. Dlaczego {{}} nie działa w atrybutach src? Dlaczego potrzebuję ngSrc?
- 23. Jak uzyskać nazwę zmiennej, która została fizycznie wpisana w deklaracji?
- 24. Django Rest Framework Dictionary Field
- 25. Dlaczego Mockito pomija inicjalizację zmiennej składowej mojej abstrakcyjnej klasy
- 26. Zamów przez FIELD w MYSQL
- 27. Dlaczego funkcja kompilatora C++ (gcc) uważa się za pole "wirtualne"?
- 28. Co robi GLEW i dlaczego go potrzebuję?
- 29. Dlaczego C++ ma ";" po deklaracji klasy
- 30. Dlaczego kompilator narzekać tej makro deklaracji
Czy możesz dodać trochę więcej kodu? Gdzie próbujesz utworzyć nowy atrybut lub gdzieś stosujesz atrybut. Lepszy byłby kontekst. – Nick
Zapomniałem o nich. Zaktualizowałem listę słów kluczowych w języku C#, aby je uwzględnić. Dzięki! Szczegółowe informacje można znaleźć na stronie http://blogs.msdn.com/ericlippert/archive/2009/05/11/reserved-and-contextual-keywords.aspx. –