2016-06-27 8 views
5

Tak więc próbuję przekazać lokalny ciąg do innej postaci w projekcie C#. To jest mój kod:Właściwość lub indeksowanie nie może być przypisane do "-" jest tylko do odczytu

Forma 1:

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

Form 2

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

Dostaję błąd:

Property or indexer "Main.Passvalue" cannot be assigned to "--" it is read only

nigdy niczego zadeklarowanej jako ReadOnly, czy Czy ktoś wie, jaki jest tutaj problem?

+2

I to dlatego, że nie określono 'nieruchomość set' dla' Passvalue' –

Odpowiedz

2

Jeśli chcesz, aby móc ustawić swoją nieruchomość, trzeba dodaj ustawić Handler:

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

Byłoby łatwiej, choć w użyciu właściwości auto realizowany od razu:

public string Username 
{ 
    get; 
    set; 
} 
2

Twoja własność tęskni za seterem. Zmień go na adres:

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

Działa teraz, dziękuję! –

2

Problemem jest to, że masz tylko getter dla Form2.Passvalue, ale nie seter. Dodaj ten w Form2:

public string Passvalue 
{ 
    get { return Username; } 
    set { Username = value; } // add this setter 
} 
7

To nie seter, co sprawia, że ​​właściwość tylko do odczytu, zmień go na:

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

Nawiasem mówiąc, ten wydaje się nieco zbędny, jak jesteś publicznie narażając Username tak czy inaczej. Ogólnie uważa się, że dobrą praktyką jest uczynienie pól klasy prywatnymi.

1

Właściwość nie ma setera.

Oto kod, którego można użyć do automatycznych implementacji modułów pobierających i ustawiających.

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

Albo jeśli chcesz pobrać i ustawić wartość nazwa_użytkownika z Passvalue, można użyć

public string Username { get; set; } 
public string Passvalue 
{ 
    get { return Username; } 
    set { Username = value; } 
} 
Powiązane problemy