9
votes

Cours statiques à Delphi (Win32)

est-il dans Delphi (Win32) de déclarer une classe entière (non seulement une fonction de la classe) comme statique?


1 commentaires

Faites manuellement chaque variable, objet et méthode statique (classe var). c'est tout


8 Réponses :


6
votes

Je suppose que vous voulez dire des classes statiques comme dans .net (et non "statique" comme dans Delphi / natif traditionnel) - et la réponse à cela n'est pas.


2 commentaires

Cela peut peut-être vous aider à comprendre pourquoi: les classes statiques sont souvent utilisées pour l'encapsulation d'une manière similaire aux unités de Delphi.


Je préférerais ne pas supposer. Pouvez-vous s'il vous plaît faire de manière flagrante évidente ce que vous signifie par statique ?



4
votes

Je ne suis pas tout à fait sûr de ce que vous entendez par une "classe statique". Vous pouvez déclarer une classe, qui n'a que des méthodes de classe, de sorte que ces méthodes peuvent être appelées sans instantiquer la classe.

TSomeClass.SomeMethod;


0 commentaires

2
votes

pas de manière native.

Selon ce dont vous en avez besoin, si, pour les besoins de votre code, dans certains cas, vous pouvez le remplacer par un objet de motif singleton .

Pour la mise à suivre pour la mise en œuvre, je recommanderais Ce guide Ce qui couvre presque toutes les versions de Delphi, mais si vous utilisez Delphi 2010, vous pouvez également utiliser le nouveau Constructeurs de classe / destructeurs pour des résultats améliorés.


0 commentaires

1
votes

Vous pouvez également créer une nouvelle unité appelée UDG_UTILS par exemple, définissez une classe, définissez une variable globale pour cette classe et dans la section d'initialisation et de finalisation que vous gérez le constructeur de classe et le destructeur. Maintenant, tout ce que vous avez à faire est de l'appeler comme mysuperduperclass.supermethod ...


0 commentaires

2
votes

Vous pouvez créer une classe qui ne contient que des méthodes statiques. Si vous devez conserver une sorte d'état, les variables d'état doivent être transmises en tant que paramètres var. Il n'existe aucun moyen de "correctement" d'accéder aux variables statiques autres que d'avoir un ensemble de variables globales dans la section de mise en œuvre de la classe en dehors de la portée de la classe, par exemple: xxx


0 commentaires

-1
votes

éditer J'ai édité ce message pour le supprimer. La réponse est certes méchante et mérite les votes basses. Je ne veux pas qu'il reste ici pour confondre ou tromper quelqu'un encore.


4 commentaires

Le fait que vous ayez à éteindre les indices devrait vous dire que c'est un code médiocre.


Il demande une fonctionnalité qui n'est pas prise en charge, donc aucune solution ne sera parfaite. En ce qui concerne les astuces, je serais normalement d'accord et je ne tolérais pas d'éteindre les indices. Les astuces sont généralement correctes et soulignent des erreurs qui peuvent être graves et insaisissables. Mais regardez plus près de ce cas. 1- Le code ne produit aucun indice à Delphi 7. Il est donc faible code de Delphi 2010 mais pas à Delphi 7? Eh bien, peut-être. 2- L'avertissement est "déclaré mais jamais utilisé". Si vous changez du privé en protégé et scellez la classe en 2010, .Create est toujours cachée mais l'indice s'en va. Est-ce que cela le rend mieux? ...


... J'ai tendance à ne pas penser. Mais laissez-moi être clair; Je ne pense pas que vous n'ayez pas tort, ce n'est que ce cas particulier est une exception possible et que je pense que c'est le moindre de nombreux maux, tels que jetant une exception dans un constructeur public pour prévenir l'instanciation. Dans tous les cas, même celui-ci, votre point est valide et je ne veux pas décourager personne de la considérant.


Une nouvelle idée. Cependant, je ne pense pas que vous ayez jamais testé cela ... Cela ne fonctionne pas . Le constructeur constructeur par défaut.Create (); ne peut pas être "supprimé"! Si vous implémentez un constructeur avec un nom différent, créer () peut toujours être appelé. Si vous implémentez un constructeur avec le même nom mais une visibilité inférieure, la valeur par défaut sera appelée si le vôtre est hors de portée.



6
votes

J'utiliserais une classe abstraite (à ne pas être confondu avec une méthode abstraite dans une classe) pour empêcher d'être instanciée au lieu de rétrograder le constructeur à protéger: xxx

qui fera appliquer le modèle singleton et prévenir toute période d'instanciation.


0 commentaires

12
votes

ressemble à la recherche d'utilisateur de "fonctions de classe": xxx pré>

ceci est comme une méthode statique, appelez-le: p>

TSomeClass.MyFunction(...);


0 commentaires