none
Une Classe Static n'a pas besoin de constructeur Mais comment la produire? RRS feed

  • Question

  • bonjour , si l'on considère des accès à des streams de grande dimension (pas trop non plus) FileStream par exemple. Que l'on considère une classe dupliquée avec différente valeurs de membres devants êtres inscrit dans ce stream. Il est inutile de coserver dans chacune des instances de cette classe un membre de référence à ce stream (economie de mémoire) . D'autre part, une classe ne contenant que des méthodes sans aucun membre. Cette classe pourrait ne pas avoir besoin de constructeur. Voyons la classe Bitmap peut être employé sans utiliser de construction

    exemple MyBitmap as Bitmap = Bitmap.from...

    comment puis-je créer ce genre de classe?

    En Pascal il suffit de préfixer la classe par Static Mais C'est totalement différent en Visual Basic.

    Je vous remercie

    jeudi 23 septembre 2010 08:44

Réponses

  • Bonjour,

    En VB. NET pour déclarer une classe statique (c'est à dire non instanciable et qui contient automatiquement des méthodes statiques "Shared"), il faut déclarer un module :

    Module MaClasse
      Sub MaFonction() ' Sera automatiquement Shared par le compilateur
    
      End Sub
    End Module
    

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse CentSoucis vendredi 24 septembre 2010 15:33
    vendredi 24 septembre 2010 08:09
    Modérateur

Toutes les réponses

  •  

    Bonjour,

     

    non une classe en VB ne peut pas etre static

    par contre une variable le peut

    http://msdn.microsoft.com/fr-fr/library/z2cty7t8.aspx

     

     


    fred
    jeudi 23 septembre 2010 17:36
  • Bonjour,

    J'ai arrété Pascal depuis 1995 et je ne suis pas sûr de la signification de static en Pascal.Est-ce le même sens que static en VC# ( une classe static ne peut pas être instanciée et tous ses membres doivent être static ) ?

    http://msdn.microsoft.com/fr-fr/library/79b3xss3.aspx

    Rien n'empeche d'avoir une classe avec tous ses membres ( propriétés et méthodes déclarées comme Shared ). Il n'y a pas besoin de constructeur dans ce cas. Par contre, un module ne pourrait-il pas jouer ce rôle ?

    Je programme peu en VB ( en général,  lorsqu'une personne demande un exemple de code , je le fournis en VC#, et si cette personne demande en VB, je pars de mon exemple en VC# et je le réécris en VB en vérifiant que le résultat est le même dans les 2 langages ( c'est pourquoi je n'utilise que les classes et types .Net, je ne connais pas Sort ou Long, je ne connais que Int16 ou Int64 , cela m'évite de me poser des questions sur la longueur d'une variable, et j'utilise à fond la classe Convert ). Donc, je ne suis pas un spécialiste de VB, mais cette question m'interesse et je suis d'un naturel très curieux. C'est pourquoi je me mèle à ce fil pour vérifier si ma façon de concevoir VB est correcte ( en cas d'erreur, j'apprécierai une explication ou un lien avec beaucoup de reconnaissance).

    Bonne journée


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.
    jeudi 23 septembre 2010 18:21
  • Bonjour,

    En VB. NET pour déclarer une classe statique (c'est à dire non instanciable et qui contient automatiquement des méthodes statiques "Shared"), il faut déclarer un module :

    Module MaClasse
      Sub MaFonction() ' Sera automatiquement Shared par le compilateur
    
      End Sub
    End Module
    

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse CentSoucis vendredi 24 septembre 2010 15:33
    vendredi 24 septembre 2010 08:09
    Modérateur
  • Bonsoir, Je vous remercie Monsieur TOURREAU pour votre réponse. Je vais me familiariser avec les Modules. Si j'ai bien compris la classe bitmap est un module ce qui permet d'accéder à ses méthodes?

    Je vous remercie à bientôt.

    vendredi 24 septembre 2010 15:39
  • Bonjour,

    Non... Bitmap est une classe standard qui contient des méthodes statiques et non statiques. Elle est instanciable uniquement par des méthodes statiques car son constructeur est privée (un constructeur privé ne peut être appelé que dans la classe elle même).

    La classe Math est un bon exemple de Module. En effet, elle contient uniquement des méthodes statiques et un instance de Math ne peut exister... (Cela n'a pas de sens...)

    Pour créer une classe comme Bitmap, voici un code exemple :

    Public Class MaClass
    
      Private Sub New()
    
      End Sub
    
      Shared Function CréerInstance() As MaClass
        Return New MaClass()
      End Function
    
    End Class
    

    Ainsi on est obligé d'appeler la méthode CréerInstance() pour créer une instance de MaClass :

        Dim i As MaClass
        i = MaClass.CréerInstance()
    

    Ce pattern est utilisé, lorsque l'on veut construire des instances ou de retourner Nothing dans certains cas (en fonction d'un paramètre par exemple). Avec un constructeur classique (Public) ce n'est pas possible, car l'appel d'un constructeur retourne forcement une instance.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    vendredi 24 septembre 2010 15:49
    Modérateur
  • Bonsoir, je sais mais cela n'est fait que pour conserver la valeur hors ce que je recherche c'est de pouvoir utiliser des méthodes sans avoir besoin de construire une instance. Car toutes instances contruites depuis une classe construit un pointeur sur cete instance. Celà est bien si des membres de la classe sont personnels à l'instance. Mais si la classe ne possède aucun membre La classe existe tout de même en tant que modèle d'instance. Ce qu fait que toutes les méthodes sont accessibles pour toutes les instances depuis le modèle.  Le système ne copie pas toutes les méthodes pour chacune des instances. Seuls les membres sont reproduits pour conserver les informations liées à l'instance.

    Qu'en pensez vous? Monsieur TOURREAU m'a apporté la réponse qu'il faut que j'étudie un peu, Les Modules

    Je vous souhaite bonne continuation et vous remercie de votre aide. A bientôt.

     

    vendredi 24 septembre 2010 16:00
  • Bonsoir, Les classes static en Pascal n'ont pas besoin de constructeur. Chaque fois que la classe est appellée , s'il y a membre, ce sont les mêmes membres qui sont affecté par les nouvelles valeurs. Ce sont des classes qui ne sont pas instanciées. L'avantage c'est de les utiliser sans membre comme un profil de fonctionnement lié à des structure passée en paramètre comme les streams. Cela évite de construire et détruire des instances de manière répétée et inutile. cela évite aussi de passer en paramètre le profil en question pour éviter toutes ces constructions destructions.

    Je peux vous fournir du code si vous souhaitez vous penchez sur le sujet mais je fais peut être fausse route mais pour l'instant j'en suis là.

    Je vous souhaite une agréable soirée A bientôt,

    vendredi 24 septembre 2010 16:12
  • Bonjour,

    Vous m'embrouillez avec la classe Bitmap... La classe Bitmap n'est pas static, mais une classe standard. Si vous souhaitez créer une classe static comme en pascal, c'est à dire qu'elle ne peut pas être instancié, ne peut être hérité et ne peut contenir que des membres static (variables, méthodes, événement,...etc), vous devez utiliser les Module de Visual Basic.

    La classe Math du .NET Framework par exemple est une classe purement statique (pas d'héritage, contient uniquement des méthodes statiques et ne peut-être instancié).

    Est-ce que cela répond à votre question/vos doutes ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Proposé comme réponse Papy Normand dimanche 26 septembre 2010 20:21
    dimanche 26 septembre 2010 09:50
    Modérateur