bonjour
je voulais savoir si dans une classe hérité le mybase.new était implicite sans le public sub new
ou s'il fallait le spécifier ...
Bonjour.
Je ne pense pas que le mybase.new soit implicite mais qu'en fait le constructeur d'une grande majorité de classes dont on peut hériter ne nécessite pas d'initialisation particuliére
--> Le New entraîne donc simplement la création de l'instance sans rien de plus.
Quand le mybase est nécessaire (pas de sub new sans argument), vs 2005 le dit de suite...
Exemple :
Là le mybase.new est obligatoire car le FileStream n'a pas de constructeur sans argument (autrement dit, pas de constructeur sans initialisation de quelque chose).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Public Class toto Inherits System.IO.FileStream Public Sub New() MsgBox("test") End Sub End Class
Cdt.
Le constructeur de la classe parent est automatiquement appelé lors de la construction d'un objet.
Oui je sais, c'est en C# mais le fonctionnement est identique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 using System; namespace ApplicationTest { class Program { static void Main(string[] args) { Test1 a = new Test1(); Test2 b = new Test2(); Console.ReadLine(); } } class Test1 { public Test1() { Console.WriteLine("Test1 constructor"); } } class Test2 : Test1 { public Test2() { Console.WriteLine("Test2 constructor"); } } }
Voici le résultat produit :
EDIT : En supprimant le constructeur de Test2, on obtient deux fois le message Test1 constructor à l'éxecution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Test1 constructor Test1 constructor Test2 constructor
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
Parce que la classe de base ne définit pas de constructeur sans argument accessible publiquement.
PS : Tu ne vas pas me dire que le code que j'ai posté est illisible tout de même, je ne fais pas de VB.NET mais pour un programme aussi simple, ça ne doit pas changer du tout au tout, si ?![]()
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
Partager