0
votes

Utilisation des méthodes d'attribut C #

en C #, quel est le but des méthodes déclarées en attributs et comment sont-ils utilisés?

Par exemple, consultez l'attribut maxlengthatettribute : il a un tas de méthodes. L'un d'eux est le isvalid () méthode utilisée pour valider la propriété que l'attribut est appliqué à. Comment cette validation est-elle effectuée? Je suppose que le isvalid () méthode est appelé contre la propriété, mais je ne trouve pas de documentation sur la manière d'appeler les méthodes d'attribut.

Remarque: j'ai un fond de java. En Java, des annotations sont conçues comme des métadonnées et sont déclarées comme @inface s, ils n'ont donc pas de méthodes.


7 commentaires

Cette question est assez large et chaque attribut se comporte différenciement. Fondamentalement, un attribut ne fait rien en soi, il doit être analysé par une sorte de cadre. Ce que ce cadre fait réellement est totalement au créateur des attributs. Le cadre peut donc simplement vérifier si un attribut est présent, mais cela peut bien sûr également appeler ses membres.


Vous devez être plus précis sur votre problème. Qu'essayez-vous? Pouvez-vous nous montrer du code? S'il vous plaît Lisez comment poser une bonne question puis modifiez votre question pour l'améliorer. Merci!


@HIMBROMBEERE Je comprends que (les attributs effectifs sont très similaires aux annotations Java). Ce que je ne comprends pas, c'est comment une méthode d'attribut s'appelle ...


@Shanshwarinde Cette question est en fait destinée à être générique. Toute la documentation que j'ai trouvée sur les attributs mentionne comment les utiliser et sur la manière d'accéder à leurs membres, mais il n'y a aucune mention sur leurs méthodes. Les méthodes d'attributs sont quelque chose qui manque à Java.


Vous devez ajouter un exemple en question, la mise en place du lien n'est pas une bonne idée. Cette question n'est pas utilisée à l'avenir si la page liée change. Alors, veuillez mettre quelques exemples en question, alors même si le lien est modifié votre question est toujours valide. Merci!


@Shanshwarinde Ne soyez pas trop strict avec les liens ici. Tout d'abord, il est improbable que Microsoft-Docs change dans l'avenir et donc les pauses de liaison. Mais même si cela peut casser la question est suffisamment clair et ne dépend pas du contenu dans le lien.


@HIMBOMBREERE OK. Génial!


3 Réponses :


2
votes

Dans presque tous les cas, la réponse est simplement: manuellement mais par code qui ne vous appartient pas. Certains morceaux de code dans certains domaines que vous utilisez sont intentionnellement vérifiant ces attributs, puis s'ils existent : les matérialisants (de préférence également avec une sorte de mise en cache) et invoquant la méthode. < p> Les attributs ne font rien d'eux-mêmes, mais ils sont toujours des types et peuvent être matérialisés via les API de réflexion. Si vous veux écrire du code pour faire ceci: xxx


0 commentaires

1
votes

Fondamentalement, un attribut ne fait rien en soi, il doit être analysé par une sorte de cadre. Ce que ce cadre fait réellement est totalement au créateur des attributs. Donc, le cadre peut simplement vérifier si un attribut est présent, mais cela peut bien sûr également appeler ses membres.

Imaginez donc que vous avez ce code: P>

MaxLengthAttribute(2)
public int[] MyArr = new int[3];


0 commentaires

0
votes

À titre d'exemple, consultez l'attribut maxlengthatetribute: il a un tas de méthodes. L'un d'eux est la méthode isvalid (), utilisée pour valider la propriété que l'attribut est appliqué à. Comment cette validation est-elle effectuée? Je suppose que la méthode isvalid () est appelée contre la propriété, mais je ne trouve pas de documentation sur la manière d'appeler les méthodes d'attribut.

Voici un exemple très simple: xxx

c'est plus ou moins ce que validator.validateObject fait, sauf avec beaucoup plus de mise en cache.

(dans le Cas des méthodes de daNaNotations, TypeDeScriptor infrastructure est réellement utilisé. Cela vous permet d'ajouter efficacement des attributs aux classes et à leurs propriétés sans modifier directement la source de la classe).

Exemple annulable


0 commentaires