Kiedy powinienem używać atrybutu w C#?

Widziałem kilka przykładów atrybutu utilize, np. (jako mapa dla dynamic factory) http://msdn.microsoft.com/en-us/magazine/cc164170.aspx

Zastanawiam się, jaka jest zaleta używania atrybutu? I can find the reference on http://msdn.microsoft.com/en-gb/z0w1kczw (VS. 80). aspx nie jestem jednak pewien, kiedy i dlaczego powinienem spróbować go użyć.

Author: user, 2010-02-19

5 answers

W. NET Framework, atrybuty mogą być używane z wielu powodów - jak

  • Definiowanie, które klasy są serializable

  • Wybór metod ekspozycji w serwis internetowy

Attributes pozwól nam dodać descriptions do klas, właściwości i metod w czasie projektowania, które mogą być następnie badane w czasie wykonywania przez reflection.

Rozważ ten przykład:

Powiedzmy, że masz klasę, która ma metodę ze starszej wersji, która jest wciąż w użyciu z jakiegokolwiek powodu i teraz wymyśliłeś nową wersję klasy, która fantastycznie wykorzystuje Generic List i LINQ i ma nową metodę do podobnego celu. Chcesz, aby deweloperzy preferowali nową wersję dostępną w późniejszej wersji twojej Biblioteki. Jak to zrobisz ? Jednym ze sposobów jest zapisanie w dokumentacji. Lepszym sposobem jest użycie atrybutu w następujący sposób.

public class AccountsManager
{
  [Obsolete("prefer GetAccountsList", true)]
  static Account[] GetAccounts( ) { }    
  static List<Account> GetAccountsList( ) { }      
}

Jeśli podczas kompilacji programu używana jest Metoda obsolete, programista otrzymuje te informacje i decyduje odpowiednio.

AccountManager.GetAccounts() jest przestarzałe: preferuj GetAccountsList

Możemy również tworzyć i dodawać Custom Attributes zgodnie z wymaganiami.

Odniesienie:


Hope this helps

 29
Author: Asad Butt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-27 20:06:32

Moje zalecenie: używaj atrybutów do przedstawiania faktów dotyczących mechanizmów, ale nie do modelowania aspektów swojej domeny biznesowej.

Więcej Szczegółów:

Http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx

 20
Author: Eric Lippert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-19 16:30:06

Atrybuty są odpowiednie, gdy chcesz dołączyć metadane do klas lub członków klasy, a także gdy stosujesz wspólne zachowanie bez konieczności implementowania określonego interfejsu dla każdej jednostki, która dzieli to zachowanie. Ten ostatni jest przykładem programowania zorientowanego na aspekt .

 5
Author: Anders Fjeldstad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-19 09:26:37

Uznaj atrybut za metadane dotyczące metody lub właściwości, do których należy. To mówi coś więcej o członku.

 4
Author: Gerrie Schenck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-19 09:26:35

. NET Framework predefiniuje i używa typów atrybutów do kontrolowania zachowania aplikacji w czasie wykonywania.

Rozważ atrybut [webmethod], podczas wykonywania framework rozwiązuje ten atrybut i określa, że ta metoda będzie wystawiona na działanie usługi webservice.

W ten sam sposób można zapisać własne atrybuty, aby kontrolować zachowanie aplikacji w czasie wykonywania. Atrybuty mogą kierować klasy, metody, właściwości, delegat, enum, Zdarzenie, pole...

Aby rozwiązać atrybut w czasie wykonywania musisz użyć reflection.

Aby uzyskać więcej informacji, sprawdź link MSDN .
 1
Author: RameshVel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-19 09:25:47