La première réflexion est de savoir si ces attributs du code de vérification peuvent être définis (c'est-à-dire s'ils sont encapsulés dans une classe puis utilisés en exposant des attributs et des méthodes publics, ou si la vérification est implémentée directement dans le gestionnaire général) Génération de code vers la sortie), le résultat est malheureusement le dernier... L'algorithme à l'intérieur semble plut?t bien, du moins pour quelqu'un comme moi qui comprend à peine les algorithmes, alors j'ai pensé à l'encapsuler, puis elle l'a incorporé sans vergogne dans sa propre bibliothèque de classes. ^^
Analysez d'abord les lacunes de ce code (ce qu'elle pense)?:
1. Pour la programmation procédurale, si vous souhaitez modifier les propriétés du code de vérification, telles que la modification de la taille de la police, de la couleur d'arrière-plan et autres. détails, vous devez trouver le code correspondant dans le programme de traitement général et le modifier. Cependant, ce code est meilleur. Il sépare la génération de cha?ne de code de vérification et la génération d'images en différentes méthodes, ce qui facilite la recherche des endroits à modifier.
2. Si je souhaite appliquer cette fonction à d'autres endroits, comme un programme winform, alors ce code ne peut pas être réutilisé sous la forme d'un composant (une dll), mais peut être copié, collé et modifié...
3. Je n'ai pas constaté que le code de vérification avait été enregistré après sa génération (- -!)
Bien s?r, les soi-disant défauts sont relatifs, c'est-à-dire si vous avez le temps de le faire. réfléchissez-y puis concevez lentement une classe de code de vérification, vous le ferez certainement. Cela peut faire une classe relativement bonne, mais si vous travaillez sur un projet et que le projet est urgent, un tel code est en fait plus puissant. le découplage de code de modèle de conception orienté n'est qu'un nuage ~~~
La prochaine étape est ma modification de ce code. Tout d'abord, je détermine quel effet je veux, c'est-à-dire comment je veux l'utiliser après l'avoir encapsulé. Tout d'abord, j'espère que lors de son utilisation, il me suffira de créer une nouvelle instance de code de vérification (si nécessaire, je peux définir arbitrairement divers attributs du code de vérification), puis je pourrai appeler certaines méthodes de cette instance pour utiliser des cha?nes. , flux, objets bitmap et octets respectivement. Obtenez ce code de vérification sous la forme d'un tableau (notez que cette classe de code de vérification n'inclut pas la fonction de sauvegarde du code de vérification dans le contexte. Personnellement, je pense que générer le code de vérification et enregistrer le code de vérification dans le contexte sont deux fonctions différentes. Il n'est pas nécessaire d'ajouter cette fonction dans la catégorie du code de vérification). Dans ce cas, le code devient extrêmement simple dans le programme de traitement général. Il suffit d'abord de créer un code de vérification avec new, puis d'appeler la méthode pour obtenir le code de vérification sous forme de cha?ne, puis de l'enregistrer le matin et l'après-midi. . Quant à savoir s'il existe dans la session ou dans le cookie, cela vient selon les besoins, et la classe du code de vérification ne s'en soucie pas, elle appelle alors une autre méthode pour obtenir le code de vérification sous la forme d'un tableau d'octets, afin que l'image puisse être obtenue. être généré via la méthode context.Response.BinaryWrite(), c'est-à-dire qu'il n'y a que trois lignes de code dans le programme de traitement général. Le code d'appel est à peu près le suivant?:
/// <summary> /// 獲取驗(yàn)證碼(一般處理程序入口函數(shù)) /// </summary> /// <param name="context">當(dāng)前上下文</param> public void ProcessRequest(HttpContext context) { // 創(chuàng)建驗(yàn)證碼 ValidateCode validateCode = new ValidateCode(); // 獲取驗(yàn)證碼(字符串),寫(xiě)入Session context.Session["SomeValidateCode"] = validateCode.GetString(); // 輸出驗(yàn)證碼(圖片) context.Response.BinaryWrite(validateCode.GetByteArray()); }
PS?: Je me souviens que lorsque j'ai commencé à travailler, le code était très mal écrit (pire que maintenant, je l'utilisais habituellement directement lorsque j'en recevais une copie). du code. Je n'y ai jamais pensé. Pour modifier ou encapsuler le code, mon ma?tre m'a enseigné à cette époque et j'ai été très impressionné. Personnellement, je pense qu'il n'y a rien de mal à utiliser le code d'autres personnes. Tout d'abord, d'autres l'ont utilisé pour au moins prouver l'utilisabilité du code. De plus, avec un QI limité, certaines choses ne sont pas aussi bonnes que ce que pensent les autres. si vous voulez en profiter, mais vous ne devez pas utiliser aveuglément le code des autres. Utilisez-le simplement. Il est préférable d'apporter les modifications ou l'encapsulation nécessaires en fonction de votre situation réelle, même s'il ne s'agit que d'une simple couche. Bien s?r, encore une fois, si le projet est urgent, c'est évidemment une perte de temps. Bref, n'y pensez pas, utilisez-le dès que vous l'avez, assurez-vous au moins du code clé ou de la structure globale de. le code est clair.
Pour plus d'articles sur le code de vérification asp.net encapsulé, veuillez faire attention au site Web PHP chinois?!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

C # met en ?uvre un mécanisme de gestion des exceptions structuré grace à l'essai, à la capture et enfin des blocs. Les développeurs placent le code d'erreur possible dans le bloc Try, attrapent des exceptions spécifiques (telles que IOException, SQLEXception) dans le bloc Catch et effectuent un nettoyage des ressources dans le bloc enfin. 1. Des exceptions spécifiques devraient être prises au lieu d'exceptions générales (telles que des exceptions) pour éviter de cacher des erreurs graves et d'améliorer l'efficacité du débogage; 2. évitez la prise d'essai trop utilisée dans le code critique des performances. Il est recommandé de vérifier les conditions à l'avance ou d'utiliser des méthodes telles que TryParse à la place; 3. Relion des ressources en éventualité ou en utilisant des instructions pour s'assurer que les fichiers, les connexions, etc. sont cl?turés correctement.

En C #, Task.Run convient plus aux opérations asynchrones simples, tandis que Task.factory.StartNew convient aux scénarios où la planification des taches doit être finement contr?lée. Task.Run simplifie l'utilisation des threads d'arrière-plan, utilise des pools de threads par défaut et ne capture pas le contexte, adapté pour "envoyer et oublier les taches à forte intensité du processeur; tandis que Task.factory.StartNew fournit plus d'options, telles que la spécification des planificateurs de taches, l'annulation de jetons et des options de création de taches, qui peuvent être utilisées pour un traitement parallèle complexe ou des scénarios où la planification personnalisée est requise. La différence de comportement entre les deux peut affecter la continuation de la tache et le comportement de la sous-tache, de sorte que la méthode appropriée doit être sélectionnée en fonction des besoins réels.

La réflexion est un mécanisme de vérification et d'exploitation dynamiquement et leurs membres à l'exécution. Ses utilisations de base incluent: 1. Obtenez des informations de type et créez des instances dynamiquement; 2. Appelez dynamiquement les méthodes et les attributs d'accès, y compris les membres privés; 3. Vérifiez les types de l'assemblage, adaptés aux systèmes de plug-in, aux bibliothèques de sérialisation et à d'autres scénarios. Les méthodes d'utilisation courantes incluent le chargement de la DLL pour créer des objets, la traversée des attributs pour le traitement unifié, l'appel des méthodes privées, etc. Cependant, les performances de réflexion sont faibles, et les principaux problèmes incluent les premiers appels lents, les appels fréquents plus lents et l'incapacité d'optimiser en ligne. Par conséquent, il est recommandé de mettre en cache les résultats de réflexion, d'utiliser des appels de délégués ou des alternatives pour améliorer l'efficacité. L'utilisation rationnelle de la réflexion peut équilibrer la flexibilité et les performances.

La correspondance de motifs en C # rend la logique conditionnelle plus concise et expressive à travers les expressions est et les expressions de commutation. 1. Utilisez l'expression IS pour effectuer des contr?les de type concis, tels que si (objectrings), et extraire les valeurs en même temps; 2. Utilisez des modes logiques (et, ou, non) pour simplifier les jugements conditionnels, tels que la valeur> 0 et

Les méthodes d'extension permettent de leur ?ajouter? des méthodes sans modifier le type ou la création de classes dérivées. Ce sont des méthodes statiques définies dans les classes statiques, appelées via la syntaxe de méthode d'instance, et le premier paramètre spécifie le type étendu à l'aide de ce mot-clé. Par exemple, la méthode d'extension IsNullorempty peut être définie pour le type de cha?ne et appelé comme une méthode d'instance. Les étapes de définition incluent: 1. Créer une classe statique; 2. Définition d'une méthode statique; 3. Ajoutez ceci avant le premier paramètre; 4. Appelez en utilisant la syntaxe de la méthode d'instance. Les méthodes d'extension conviennent à l'amélioration de la lisibilité des types existants, des types qui ne peuvent pas être modifiés par les opérations ou des bibliothèques d'outils de construction, et sont couramment trouvés dans LINQ. Notez qu'il ne peut pas accéder aux membres privés et que ce dernier est préféré lorsqu'il est confronté à la méthode d'instance du même nom. Réponse

TheyieldKeywordInc # SimplifieSiteratorCreationyByAutomAticygeneratingastateMArnEtHaTenablesLayEvaluation.1.itallowsreturningItemSonEatatimeusingyElDreturn, PausingExecutionbetweenEachItem, qui estsidéalforlargeordynynamicesences.yieldbreakCanbem, qui estsidéalforgargeordynamicSequences.yieldbreakCanbenem, qui estsidéal pour la réduction

Le r?le d'idisposable et de l'utilisation dans C # est de gérer efficacement et de manière déterministe des ressources non gérées. 1. IDisposable fournit la méthode Dispose (), afin que la classe puisse clairement définir comment libérer des ressources non gérées; 2. L'instruction d'utilisation garantit que Disser () est automatiquement appelé lorsque l'objet est hors de portée, simplifiant la gestion des ressources et évitant les fuites; 3. Lorsque vous l'utilisez, veuillez noter que l'objet doit implémenter iDisposable, peut déclarer plusieurs objets et utiliser toujours en utilisant pour des types tels que StreamReader; 4. Les meilleures pratiques courantes incluent ne pas s'appuyer sur les destructeurs pour nettoyer, gérer correctement les objets imbriqués et mettre en ?uvre le modèle de disposition (bool).

LambdaExpressionsandLinqsimpplifyDatamanipulationIn # byenablingConcise, lisible et efficacecode.1.LambdaExpressionsallowinlineFunctionDctiondfinitions, faisant en sorte que
