2009-10-19 8 views
0

Ok, je balayais par certains hier code et j'ai vu cela,De retour type incorrect d'une fonction

code:

public class MyBaseClass 
    { 
     public string Field0() 
     { 
      return string.Empty; 
     } 
    } 

    public class MyClass : MyBaseClass 
    { 
     public string Field1() 
     { 
      return String.Empty; 
     } 
    } 

rien à redire assez simple. Dans le code principal,

code:

private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private MyBaseClass GetSomthing() 
     { 
      var retVal = new MyClass(); 
      return retVal; 
     } 

maintenant ce code compile correctement, même si GetSomthing() fonction a un type de retour de MyBaseClass, il permet en fait le retour de MyClass (je suppose que cela est dû de l'héritage).

J'ai repéré cela dans un code somone elses et pour moi cela me semble une mauvaise pratique, bien que je puisse manquer quelque chose, quelqu'un a des idées?

Répondre

7

Pourquoi est-il une mauvaise pratique? C'est très bien. Par exemple, vous voudrez peut-être:

public IEnumerable<string> GetNames() 
{ 
    return new List<string> { "Fred", "Jon", "Joe" };   
} 

Il est parfaitement logique d'un point de vue d'encapsulation - vous séparant l'interface de ce que vous êtes prêt à garantir à l'appelant (ce sera une séquence des chaînes) de l'implémentation (vous utilisez un List<string>). Cela vous permet de modifier l'implémentation plus tard sans déranger les appelants.

Il est bon pratique plutôt que pauvre pratique.

2

Une instance de MyClass est aussi une instance de MyBaseClass, il est donc parfaitement valide (et commune) pour le faire ...

Questions connexes