2010-05-12 6 views
4

Son dit que cette propriété ne doit pas être "Set" seulement (règle d'analyse de code CA1044) et il devrait être "Get" aussi bien. Que dois-je faire si j'ai besoin de définir la valeur d'une variable d'une autre classe? LeComment définir une valeur à partir d'une autre classe

Le continuera à changer ainsi je ne peux pas le passer par le constructeur.

Dois-je créer une fonction pour cela comme indiqué ci-dessous?

class A 
{ 

    public void SetValue() 
    { 
     b = new B(); 
     b.SetTest(10); 
    } 
} 

class B 
{ 
    int test; 

    public void SetTest(int value) 
    { 
     test = value; 
    } 
} 

Quelles sont les autres alternatives?

Répondre

3

Je suis d'accord avec ce qu'il est un peu confus avec des propriétés d'écriture seulement (à partir d'un client des points de classe de vue), donc j'essayer de les éviter et à la place créer une méthode de jeu quelconque.

La méthode recommandée par Microsoft semble aussi être de le réécrire à une méthode (ou le faire lire et écrire si approprié): http://msdn.microsoft.com/en-us/library/ms182165.aspx

0

Qui a dit qu'une propriété ne doit pas utiliser uniquement l'accesseur set? Je ne vois pas de défaut de conception. S'il y en a un, je serai heureux d'apprendre quelque chose de nouveau :)

+3

Je pense qu'il peut être déroutant dans le code client quand il y a une propriété qui ne peut pas être lu, il ne me semble pas juste. La raison "officielle" serait l'avertissement d'analyse CA1044 - http://msdn.microsoft.com/en-us/library/ms182165.aspx –

+0

@ho - Merci pour la règle CA. J'ai oublié de mentionner cela en question. J'ai mis à jour la question maintenant. – Ram

+0

@ho +1, Merci pour l'info. –

0

Vous voulez dire quelque chose comme ça?

public int Test { get; set; } 
2

Vous pouvez utiliser un accesseur public et un accesseur privé, au cas où vous auriez besoin d'accéder à la variable dans sa propre classe.

class B { 
    public int test { private get; set; } 
} 
+0

Cela semble une meilleure alternative à moi. Mais si je peux définir la valeur de cette classe elle-même alors pourquoi devrait avoir un ensemble privé? Est-ce juste pour avoir à la fois Set et Get dans la propriété? – Ram

+0

Il ne sert à rien de définir une valeur, si vous n'allez pas utiliser cette valeur quelque part. Si c'est seulement pour déclencher une action, alors il vaut mieux écrire une méthode, comme proposé dans la réponse acceptée. – Prutswonder

0

Votre exemple ne pas faire vraiment beaucoup de sens puisque vous ne tenez pas à votre instance de B, mais vous pouvez faire quelque chose comme ceci:

class A 
{ 
    private B b; 

    public A() 
    { 
     this.b = new B(); 
    } 

    public void SetValue() 
    { 
     this.b.Test = 10; 
    } 
} 

class B 
{ 
    int test; 
    public int Test 
    { 
     get{ return this.test; } 
     set{ this.test = value; } 
    }  
} 

une autre alternative est de rendre la propriété Test un de autoproperty (où le cadre génère le champ de support), comme suit:

class B 
{ 
    public int Test{get; set;} 
} 
Questions connexes