web-dev-qa-db-fra.com

La propriété ou l'indexeur ne peuvent pas être affectés à "-" il est en lecture seule

J'essaie donc de passer une chaîne locale à un autre formulaire dans un projet c #. Ceci est mon code:

Formulaire 1:

...
Main frm = new Main();
frm.Passvalue = usrTxt.Text;
frm.ShowDialog();

Formulaire 2

...
public string Username;
public string Passvalue
{
    get { return Username; }
}

Je reçois l'erreur:

La propriété ou l'indexeur "Main.Passvalue" ne peut pas être affecté à "-" il est en lecture seule

Je n'ai jamais déclaré quoi que ce soit comme ReadOnly, quelqu'un sait-il quel est le problème ici?

7
hasno l

Il n'a pas de setter, ce qui en fait une propriété en lecture seule, remplacez-le par:

public string Passvalue
{
    get { return Username; }
    set { Username = value; }
}

Incidemment, cela semble un peu superflu, car vous exposez publiquement Username de toute façon. Il est généralement considéré comme une bonne pratique de rendre les champs de classe privés.

9
James Jenkinson

Si vous voulez pouvoir définir votre propriété, vous devez ajouter un gestionnaire set:

public string Passvalue
{
    get { return Username; }
    set { Username = value; }
}

Il serait cependant plus facile d'utiliser tout de suite les propriétés implémentées automatiquement:

public string Username
{
    get;
    set;
}
3
Patrick Hofman

Votre propriété manque de passeur. Changez le en:

public string Passvalue
{
    get { return Username; }
    set { Username = value; }
}
2
Andy Korneyev

Le problème est que vous n'avez qu'un getter pour Form2.Passvalue, mais pas setter. Ajoutez ceci dans Form2:

public string Passvalue
{
    get { return Username; }
    set { Username = value; } // add this setter
}
2
René Vogt

La propriété n'a pas de passeur.

Voici le code que vous pouvez utiliser pour les getters et les setters à implémentation automatique.

public string Username { get; set; } 
public string Passvalue { get; set; } 

Ou si vous voulez obtenir et définir la valeur de UserName à partir de Passvalue, vous pouvez utiliser 

public string Username { get; set; }
public string Passvalue
{
    get { return Username; }
    set { Username = value; }
}
1
Prateek Deshmukh