Bonjour à tous,
je voulais savoir si il existait un mot clé en vb.net qui symbolise class hérité en a partir d'une classe abstraire, un peu comme le mybase qui symbolise la class parent?
Version imprimable
Bonjour à tous,
je voulais savoir si il existait un mot clé en vb.net qui symbolise class hérité en a partir d'une classe abstraire, un peu comme le mybase qui symbolise la class parent?
Je n'ai pas bien compris, peux tu expliquer plus clairement ?
D'après ce que j'ai compris, ce n'est pas possible, car la classe héritée n'existe pas obligatoirement.
Autant une classe A qui hérite d'une autre classe B possède toujours une classe mère (B dans cet exemple), autant le cas contraire est fort improbable. Tu ne sais pas dire avec certitude qu'une classe possède des classes dérivées (à moins d'utiliser la reflection).
Les classes abstraites possèdent l'attribut MustInherit, elles doivent donc forcement être héritées, leur utilisation est semblable à celle des interfaces sauf que tu peut mettre du code dans une classe abstraite, alors q'une interface ne contient que les signatures de tes méthodes.
Code:
1
2
3
4
5
6
7
8
9
10 Public MustInherit Class ClassA Public Sub Test() '??? 'Utilisation du mot clé appelant la classe héritée. '??? End Sub End Class
Je sais bien ce que sont les interfaces et les classes abstraites ;)Citation:
Envoyé par Aurazed
J'avais donc bien compris ton problème. Ce qu'il faut que tu comprennes, c'est que le fait que déclares une classe abstraite, ne veut pas dire pour autant que tu vas définir une classe qui en hérite. Tu peux très bien définir une classe abstraite, mais pas de classe qui en hérite. C'est certes inutiles, mais c'est possible, surtout pendant la phase de développement.
Deuxième problème, si tu définis deux classes qui héritent de ta classe abstraite, comment le mot-clé que tu souhaites trouver saurait il à quelle classe il doit faire référence ?
Donc je reste sur ma première impression, le mot-clé que tu recherches n'existe pas.
En fait je souhaite faire une classe abstraite qui permette de généraliser l'implementation du design pattern singleton à toute les classes qui en hérite,Citation:
Envoyé par SaumonAgile
mais pour cela il faut appeler le constructeur ... chose infaisable avec une classe abstraite. Je voulais donc savoir comment appelé le constructeur de la class héritée.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Public MustInherit Class ClassSingleton ' Variable locale pour stocker une référence vers l'instance Private Shared pInstance As ClassSingleton= Nothing Private Shared ReadOnly pInstanceLocker As New Object() Private Sub New() End Sub Public Shared Function GetInstance() As ClassSingleton SyncLock (pInstanceLocker) If (pInstance Is Nothing) Then 'C'est la que je voudrais appeler le constructeur de la class héritée... pInstance = New ClassSingleton() End If Return pInstance End SyncLock End Function End Class
Tu as pensé à utiliser une classe Generique alors ?
Oui c'est en C# mais c'est pour l'idée simplement.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /// <summary> /// Generic singleton /// </summary> /// <typeparam name="T">Class</typeparam> class Singleton<T> where T : new() { private static readonly T _instance = new T(); /// <summary> /// Gets the instance. /// </summary> /// <value>The instance.</value> protected T Instance { get { return _instance; } } } class Client : Singleton<Client> { }
J'y aurais pas pensé ;)
Je test ca et je te dis si ca me conviens.
Ta solution fonctionne tres bien.
Voici la version Visual Basic .Net
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Public Class Singleton(Of T As New) Private Shared pInstance As T = Nothing Private Shared pLocker As Object = New Object() Public Shared ReadOnly Property Instance() As T Get SyncLock (pLocker) If pInstance Is Nothing Then pInstance = New T() End If Return pInstance End SyncLock End Get End Property End Class