2011-11-05 3 views
4

En C# est-il correct de l'utiliser dans le constructeur? (À savoir, est-il autorisé à faire référence à l'instance dans le constructeur)C#: Utilisation de ceci dans un constructeur

Comme un exemple simple:

public class Test{ 

public Test() 
{ 
    Type type = this.GetType() 
} 

} 
+0

Oui. Jetez un coup d'oeil ici: http://www.codeproject.com/KB/dotnet/ConstructorsInCSharp.aspx – FailedDev

+0

Oui ... c'est correct – Nitesh

Répondre

5

Oui, vous pouvez utiliser this dans le constructeur, mais pas dans les initialiseurs de champ.

Donc, ce n'est pas valide:

class Foo 
{ 
    private int _bar = this.GetBar(); 

    int GetBar() 
    { 
     return 42; 
    } 
} 

ce qu'autorise:

class Foo 
{ 
    private int _bar; 

    public Foo() 
    { 
     _bar = this.GetBar(); 
    } 

    int GetBar() 
    { 
     return 42; 
    } 
} 
1

Vous cherchez quelque chose comme ça?

public class Test{ 

private string strName; 
public Test(string strName) 
{ 
    this.strName = strName; 
} 

} 

Je pense est bon d'utiliser dans chaque partie de la classe l'identifiant this ... atributs, méthodes, propriétés, car il devient plus allusive à ce que vous modifiez ou d'utiliser, dans les classes complexes ou grandes cela vous aide à savoir plus vite ce que vous utilisez, mais comme je l'ai dit, à mon point de vue.

+1

'ceci' est juste une verbosité supplémentaire sans valeur ajoutée pour moi, mais pour chacun leur propre . –

+0

oui c'est juste allusive comme d'autres mots réservés comme const, readonly, juste pour le programmeur, bien et dans mon exemple, il est forcément nécessaire lorsque vous utilisez un paramètre nommé exactement égal à une propriété globale/attribut, et vous ne vous trompez pas si vous utilisez une variable locale, un paremeter ou une variable globale avec le 'this' .. mais comme vous l'avez dit à leurs propres –

+1

j'évite cela avec un trait de soulignement pour les variables membres. Je n'aime pas la convention 'memberVariable' juste pour cette raison. Ensuite, je reçois des collisions dans les signatures de méthodes et je dois utiliser 'this' partout. En outre, je ne pense pas que vous voulez dire "Allusive". Explicite peut-être? :) –

Questions connexes