8
votes

Mot-clé statique Utilisation correcte?

concernant le mot-clé statique .

Jusqu'à ce point, via mes propres recherches, j'ai une idée générale de ce que le mot clé statique est, mais je pense que toutes ces descriptions et détails différentes ne m'ont plus confondu plus. Pour le moment, je ne pense vraiment pas que je sache comment utiliser correctement " statique "; Il semble être utilisé différemment entre c # et vb.net et s'applique différemment dans la langue en fonction de ce que vous utilisez ...

Tout en lisant l'article MSDN Statique (Visual Basic) , de nombreuses questions sont apparues, en particulier lorsque j'ai lu cette phrase:

Normalement, une variable locale dans une procédure cesse d'exister dès que la procédure se termine. Un statique varie reste existant et conserve sa valeur la plus récente.

  1. est la version VB.NET de statique identique à c # ou java, est le concept identique à la plupart des langues?

  2. si statique conserve une valeur dans une classe et nous sommes en mesure d'accéder à ce membre, fonctionner sans instantiquer la classe, est-ce sûr à utiliser lâchement? En d'autres termes, devrions-nous garder un œil étroit lors de l'utilisation de statique dans des classes? Ils me rappellent des variables mondiales pour une raison quelconque. Peut-être que je suis juste ignorant ici et j'ai simplement besoin de plus de pratique pour comprendre leur but.

  3. Quels sont les bons scénarios où utiliser statique avantages et favorise la réutilisabilité du code?


0 commentaires

3 Réponses :


9
votes

in c # Le mot clé statique est identique au mot clé partage dans vb.net . Nommément, de Cours statiques et classe statique Membres (Guide de programmation C #) :

Les classes statiques et les membres de la classe sont utilisés pour créer des données et des fonctions qui peut être consulté sans créer une instance de la classe.

in vb.net statique fonctionne très différemment, car s'applique aux variables, pas de types.

Je ne sais pas s'il y a un équivalent C # pour ce comportement.

1) est la version vb.net de statique identique à c # ou java, et est le concept la même chose pour la plupart des langues?

C'est différent. partagé est le même, cependant.

2) Si statique conserve la valeur dans une classe et que nous sommes en mesure d'accéder à que certains membres, fonctionnent sans instantiquer la classe - est Ce coffre-fort à utiliser vaguement? En d'autres termes, devrions-nous garder un oeil de près Lorsque vous utilisez Static's Classes? Ils me rappellent que Global variables pour une raison quelconque, peut-être que je suis juste ignorant ici et Il suffit de plus de pratique pour comprendre leur but.

Soyez très prudent, ils sont globaux au domaine de l'application.

3) Quels sont les bons scénarios où en utilisant des avantages statiques et favorise Réutilisabilité du code?

J'utilise des listes statiques aux fichiers de cache de données utilisées pour peupler des listes déroulantes afin que je n'ai pas à continuer de frapper SQL Server comme exemple.


1 commentaires

Merci pour une réponse aussi rapide et détaillée Vershailer, cela a vraiment aidé à comprendre ce concept.



5
votes
  1. vb.net 's partagé est le même Comme C # 'S statique . C # statique est à peu près la même chose que statique en Java et la plupart des autres langues. Les concepts portent.
  2. Ceci est un oui et sans type de question. Vous ne voulez pas simplement lancer au hasard statique S sans savoir ce que vous faites. Cependant, ils peuvent être utiles à de nombreuses situations (plus sur cela à la n ° 3). Ils ne ressemblent pas vraiment à des variables globales car elles sont toujours "nomées" et organisées par la classe, elles appartiennent à.
  3. Les membres statiques sont généralement utilisés pour les méthodes d'utilité et les classes. Par exemple, C # implémente la majeure partie de la bibliothèque de mathématiques en tant que méthodes statiques, car elles ne font que des calculs et n'ont pas d'autres effets secondaires. En règle générale, si votre méthode n'a pas d'effets secondaires et que toutes les données nécessaires pour faire son travail sont sous forme de paramètres. Vous pouvez également utiliser des propriétés statiques si vous souhaitez partager certaines données entre les instances d'une classe (par exemple, suivre le nombre de fois qu'une méthode donnée a été appelée, ou quelque chose de similaire). Static a également des avantages d'utilisation de la mémoire, car cela vous permet de créer une seule instance d'une classe ou d'une méthode à partager tout au long de l'application, plutôt que de créer de nouvelles copies pour chaque utilisation. Vous utilisez également des classes statiques pour des méthodes de vulgarisation, mais c'est une autre discussion.
  4. Vous n'avez pas demandé spécifiquement, mais il convient de mentionner les inconvénients. La plus grande raison d'éviter les statiques est la maintenabilité. Vous ne pouvez pas hériter ou étendre facilement des cours statiques, ce qui est une chose majeure à laquelle réfléchir. Tant que vous vous en tenez à la composition sur la règle d'héritage, ce n'est pas nécessairement un daqueur de négociation, mais le manque d'héritage et de polymorphisme pour les classes statiques est un inconvénient majeur. Que l'une seule question conduit à beaucoup de gens à suggérer d'éviter de statique dans tous les cas.

1 commentaires

Excellente explication détaillée! Merci beaucoup Tim, cela a vraiment effacé beaucoup. :)



6
votes

Les autres réponses traitées avec les usages C # de statiques, donc je parlerai de static code> dans vb.net depuis que vous avez référencé un article MSDN à ce sujet. Lorsque vous effectuez une variable locale statique dans VB.NET, le compilateur traduira la variable niveau de classe em> qui ne peut être référencée que par code dans la fonction dans laquelle la variable est déclarée au code. Si ladite variable est une instance ou partagée dépend de la fonction contenant. Par exemple, ce code:

Public Class StaticTest
    ' Methods
    <DebuggerNonUserCode> _
    Public Sub New()
    End Sub

    Public Function Process(ByVal value As Integer) As Integer
        If (value > 0) Then
            Dim result As Integer = value
            Me.$STATIC$Process$20188$lastValue = value
            Return result
        End If
       Return Me.$STATIC$Process$20188$lastValue
    End Function

    ' Fields
    Private $STATIC$Process$20188$lastValue As Integer
End Class


0 commentaires