Bonjour,

J'avais qq questions de débutant a propos de using et des exceptions :

1)Est-ce que la method Dispose marche sur un objet même si celui-ci est Null ? Car 95% du code que j’ai trouve sur internet ne vérifie jamais dans un Finally si l’objet est Null ou pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
MyObj o = null ;
Try
{
O = new MyObj() ;
…
}
Catch(Exception e)
{}
Finally
{
o.dispose() ; // Mais si o est tjs Null alors ?
}

2) Si j’ai bien compris en utilisant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Using(MyClass o = new MyClass())
{
Code
} //Ici l’objet Myclass sera libérée s' il y a des unmanaged ressources.
Donc je n’ai pas besoin d’utilise o.Dipose() ou o.Close() ?

3) J’ai vu bcp de code qui remplacent des try/catch par un Using par exemple :
A la place de faire

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
try
{
SqlDataReader reader = command.ExecuteReader()
}
Catch(Exception e)
{
Code
}
Finally
{
code
}
On remplace cela par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
using (SqlConnection fnet = new SqlConnection(connectionString))
{
}
Mais dans le cas du Using, qu’est ce qui arrive s’il y a une exception? Elle est renvoyée au niveau au dessus si on met pas le Using dans un try/catch?

4) Est-ce que dans un Using tous les objets qui utilisent des unmanaged ressources seront libérés ou seul l’objet déclaré entre les () du Using ?
Ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
using (SqlConnection fnet = new SqlConnection(connectionString))
{
MyClass o = new MyClass() ; //Ma class avec du unmanaged ressources//Est-ce que ici j’ai besoin de faire o.Dipose() ?
}
Merci.