2010-02-12 8 views
0

J'écris une classe wrapper en C# pour un périphérique USB (en utilisant P/Invoke pour communiquer avec lui). L'appareil doit recevoir un message ouvert avant utilisation, et une méthode proche quand c'est fait. Dans mon constructeur, je veux essayer d'ouvrir l'appareil et de retourner null si cet appel échoue pour une raison quelconque. Je vais aussi écrire un Dispose() qui appelle la méthode close sur le périphérique.Classe C# représentant un périphérique USB

Est-ce une manière sensée de le coder? Ou devrais-je avoir une méthode séparée ConnectToDevice?

En mettant dans le constructeur J'espère que les utilisateurs de ma classe peuvent simplement écrire:

USBDevice myDevice = new USBDevice() 

if (myDevice != null) { 
    myDevice.PerformAction(); 
    myDevice.Dispose(); 
    myDevice = null; 
} 

Répondre

2

Si votre constructeur échoue la référence sera toujours nulle. Cependant, si vous avez alloué des ressources jetables avant l'erreur, l'appelant ne peut pas appeler Dispose sur l'instance, car il n'y a aucune référence. Ainsi, si vous voulez le faire dans le constructeur, vous devez vous assurer que le constructeur échoue gracieusement.

Pour garder les choses simples, j'irais probablement avec une méthode Connect à la place.