2017-01-11 13 views
10

Nie wiem, czy to jest takie proste nikt nie patrzy na to, ale nie znaleziono niczego ...wartość Przypisywanie bezpośrednio do zmiennej klasy

Chcę wykonać następujące czynności:

public class foo 
{ 
    string X 
    { 
     get; 
     set 
     { 
      //set and do some other stuff 
     } 
    } 

    //some other functions 
} 

główne:

private foo = new foo(); 

foo = "bla"; 

Jak mogę przypisać ten bla bezpośrednio do klasy zmiennej foo bez użycia foo.X = "bla"?

W jaki sposób są to typy danych, na przykład ciąg znaków? W jaki sposób są wykonane? Ponieważ mogę zrobić string y; y = "abc"?

+0

Będziesz musiał zastąpić operatora przypisania '='. Ale dlaczego chcesz to zrobić? – Prajwal

+3

String może to zrobić, ponieważ '" abc "' * jest * ciągiem znaków. Podobnie jak można przypisać obiekt typu X do zmiennej typu X. –

+0

@SamiKuhmonen Nigdy nie myślałem o tym, to ma absolutnie sens ... – Dominik

Odpowiedz

21

Szukasz niejawnego operatora?

public class foo { 
    string X { 
    get; 
    set; 
    } 

    public static implicit operator foo(string value) { 
    return new foo() { 
     X = value 
    }; 
    } 
} 

proszę, informacja, że ​​nie ma połączenia konstruktor tutaj który będzie nosił nazwę (a zatem utworzyć nową instancję foo) domyśle:

private foo myFoo = "bla"; 
+6

Należy zauważyć, że tworzy to * nową * instancję 'foo', a przypisanie całkowicie zastępuje stary obiekt. Stary obiekt w szczególności nie może wiedzieć, że jest zastępowany w ten sposób. – poke

+0

Dokładnie - dziękuję! – Dominik

-2

Chyba masz na myśli:

private foo = new foo(); 
foo.X = "bla"; 

Nie? Więc będzie to:

private foo = new foo() { 
    X = "bla" 
}; 

i X musi być publiczne. Czy dobrze cię rozumiem?

+3

To jest dokładnie to, co OP * nie znaczyło *. –

Powiązane problemy