Les contraintes génériques sont utilisées pour restreindre les types de données qui peuvent être utilisés avec une classe ou une méthode générique. Cela permet de garantir que les types spécifiés répondent à certains critères, ce qui améliore la sécurité et la flexibilité du code.
As Class
ou As Structure
As New
As Interface
)As Class
ou As Structure
As Class
: Restreint le type générique aux classes ou aux types de référence.As Structure
: Restreint le type générique aux structures ou types de valeur.' Exemple : Contraindre à des classes
Public Class ExampleClass(Of T As Class)
Private _value As T
Public Sub New(value As T)
_value = value
End Sub
End Class
' Exemple : Contraindre à des structures
Public Class ExampleStruct(Of T As Structure)
Private _value As T
Public Sub New(value As T)
_value = value
End Sub
End Class
As New
Public Class ExampleNew(Of T As New)
Private _instance As T
Public Sub New()
_instance = New T() ' Fonctionne uniquement si T a un constructeur sans paramètre
End Sub
Public Function GetInstance() As T
Return _instance
End Function
End Class
' Utilisation
Public Class Person
Public Property Name As String
End Class
Dim example As New ExampleNew(Of Person)()
Dim person As Person = example.GetInstance()
As Interface
)Public Interface IExample
Sub DoSomething()
End Interface
Public Class ExampleWithInterface(Of T As IExample)
Public Sub Execute(item As T)
item.DoSomething()
End Sub
End Class
' Classe implémentant l'interface
Public Class MyClass
Implements IExample
Public Sub DoSomething() Implements IExample.DoSomething
Console.WriteLine("Action exécutée.")
End Sub
End Class
' Utilisation
Dim example As New ExampleWithInterface(Of MyClass)()
example.Execute(New MyClass())
Public Class Animal
Public Overridable Sub Speak()
Console.WriteLine("Animal speaks.")
End Sub
End Class
Public Class Dog
Inherits Animal
Public Overrides Sub Speak()
Console.WriteLine("Dog barks.")
End Sub
End Class
Public Class ExampleWithBaseClass(Of T As Animal)
Public Sub MakeAnimalSpeak(animal As T)
animal.Speak()
End Sub
End Class
' Utilisation
Dim example As New ExampleWithBaseClass(Of Dog)()
example.MakeAnimalSpeak(New Dog())
Vous pouvez combiner plusieurs contraintes pour définir un type générique encore plus spécifique.
Public Class ExampleWithMultipleConstraints(Of T As {Class, IExample, New})
Private _instance As T
Public Sub New()
_instance = New T() ' Nécessite un constructeur sans paramètre
End Sub
Public Sub Execute()
_instance.DoSomething() ' Nécessite que T implémente IExample
End Sub
End Class
' Utilisation
Dim example As New ExampleWithMultipleConstraints(Of MyClass)()
example.Execute()
Mot-clé | Description |
---|---|
As Class | Restreint aux types de référence (classes). |
As Structure | Restreint aux types de valeur (structures). |
As New | Restreint aux types ayant un constructeur vide. |
As Interface | Restreint aux types implémentant une interface. |
As BaseClass | Restreint aux types héritant d’une classe. |
Voici un exemple complet et pratique qui illustre l’utilisation des contraintes génériques en VB.NET. Cet exemple combine plusieurs types de contraintes pour montrer comment créer une classe générique robuste.
Nous allons créer une classe générique appelée AnimalHandler
qui :
Animal
.ICanSpeak
.New
pour permettre la création d’instances d’animaux.' Définir l'interface ICanSpeak
Public Interface ICanSpeak
Sub Speak()
End Interface
' Définir une classe de base Animal
Public MustInherit Class Animal
Public Property Name As String
Public Sub New(name As String)
Me.Name = name
End Sub
End Class
' Définir une classe Dog héritant d'Animal et implémentant ICanSpeak
Public Class Dog
Inherits Animal
Implements ICanSpeak
Public Sub New(name As String)
MyBase.New(name)
End Sub
Public Sub Speak() Implements ICanSpeak.Speak
Console.WriteLine($"{Name} says: Woof!")
End Sub
End Class
' Définir une classe Cat héritant d'Animal et implémentant ICanSpeak
Public Class Cat
Inherits Animal
Implements ICanSpeak
Public Sub New(name As String)
MyBase.New(name)
End Sub
Public Sub Speak() Implements ICanSpeak.Speak
Console.WriteLine($"{Name} says: Meow!")
End Sub
End Class
' Définir une classe générique AnimalHandler avec des contraintes
Public Class AnimalHandler(Of T As {Animal, ICanSpeak, New})
Private _animals As New List(Of T)
' Ajouter un animal
Public Sub AddAnimal(animal As T)
_animals.Add(animal)
End Sub
' Créer un animal par défaut
Public Sub CreateAndAddAnimal(defaultName As String)
Dim newAnimal As T = New T() ' Nécessite un constructeur sans paramètre
newAnimal.Name = defaultName
_animals.Add(newAnimal)
End Sub
' Faire parler tous les animaux
Public Sub MakeAllSpeak()
For Each animal In _animals
animal.Speak()
Next
End Sub
End Class
' Utilisation dans le programme principal
Module Program
Sub Main()
' Gestionnaire pour les chiens
Dim dogHandler As New AnimalHandler(Of Dog)()
' Ajouter des chiens
dogHandler.AddAnimal(New Dog("Buddy"))
dogHandler.AddAnimal(New Dog("Max"))
' Gestionnaire pour les chats
Dim catHandler As New AnimalHandler(Of Cat)()
' Ajouter des chats
catHandler.AddAnimal(New Cat("Whiskers"))
catHandler.AddAnimal(New Cat("Luna"))
' Faire parler tous les chiens
Console.WriteLine("Dogs:")
dogHandler.MakeAllSpeak()
' Faire parler tous les chats
Console.WriteLine("Cats:")
catHandler.MakeAllSpeak()
Console.ReadLine()
End Sub
End Module
Animal
: Name
commune à tous les animaux.ICanSpeak
: Speak()
.Dog
et Cat
: Animal
.ICanSpeak
pour définir un comportement spécifique.AnimalHandler
: <Of T As {Animal, ICanSpeak, New}>
pour contraindre : T
doit être une classe qui hérite d’Animal
.T
doit implémenter ICanSpeak
.T
doit avoir un constructeur sans paramètre (New
).AnimalHandler
est créée pour gérer les chiens (Dog
) et une autre pour gérer les chats (Cat
).Dogs:
Buddy says: Woof!
Max says: Woof!
Cats:
Whiskers says: Meow!
Luna says: Meow!
AnimalHandler
peut être utilisé pour gérer n’importe quel type d’animaux répondant aux critères.Animal
, ICanSpeak
et New
garantissent que la classe générique est utilisée correctement.Ce modèle est extensible et robuste pour des scénarios plus complexes.
Voici un QCM Contrôle de Gestion - Pilotage de la Performance bien conçu sur le…
Une fiche d’action est un outil essentiel pour planifier, suivre et gérer les tâches dans…
La fiche de parrainage est bien plus qu’un simple document administratif. Elle constitue un outil…
La tenue de registres est une méthode essentielle pour organiser et gérer des informations de…
La critique littéraire est une approche qui consiste à analyser, interpréter et évaluer un texte…
La méthode de lecture Paul et Suzanne est une méthode syllabique qui repose sur un…
This website uses cookies.