• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Interpolacja stringów

Object Storage Arubacloud
+1 głos
576 wizyt
pytanie zadane 12 maja 2021 w C# przez tomasz12345 Użytkownik (750 p.)

Witam, interesuje mnie jedna rzecz, mianowicie dlaczego nie moge zrobić tak :

public string FirstName = "Tomek";
public string LastName = "Kowalski";
public string FullName = $"{FirstName} + {LastName}";

 

tylko muszę dać => ?

public string FirstName = "Tomek";
public string LastName = "Kowalski";
public string FullName => $"{FirstName} + {LastName}";

dlaczego nie moge po prostu tego w ten sposoób przypinać tylko zwracać wartość gettera?

2 odpowiedzi

+2 głosów
odpowiedź 12 maja 2021 przez Velta Maniak (52,010 p.)
edycja 12 maja 2021 przez Velta

Nie ma pewności, że FirstName i LastName powstaną jako pierwsze. Getter umożliwia pobranie tych wartości dopiero wtedy, kiedy dostani taki rozkaz, zamiast przy powstaniu obiektu. Najprościej to ominąć robiąc to po prostu w konstruktorze, chociaż z drugiej strony – jak dla mnie FullName jak najbardziej nadaje się na gettera, zamiast na właściwość.

+2 głosów
odpowiedź 12 maja 2021 przez Wiciorny Ekspert (270,110 p.)

https://docs.microsoft.com/pl-pl/dotnet/csharp/language-reference/tokens/interpolated
Lepiej niż tutaj nigdzie nie znajdziesz :)
public string FullName = $"{FirstName} + {LastName}"; możesz zrobić, ale nie jeśli mowa o polach klasy, dlaczego ? 
Ponieważ jak kolega napisał, w funkcji masz dostęp do zmiennych, bo one wywołują się linia po lini, natomiast w sytuacji kiedy masz klase pola są tworzone nie według - tego jak zbudowana jest klasa tzn linia po lini, ale według konwencji języka.

Zwyczajnie jest to : najpierw tworzenie wszystkich obiektów "bazowych" jeśli jest dziedziczenie to bedą to konstruktory nad klasy, potem tworzone są wszystkie "statyczne bloki", następnie wszystkie statyczne pola, w tym także filalne, potem dopiero jest ładowane pole klasy - w kolejności- a dopiero na końcu jest wołany konstruktor klasy. 
Stąd 
 

public string FullName => $"{FirstName} + {LastName}";

w tej wersji, masz wyrażenie funkcyjne - a wyrażenie funkcyjne  (lambda) wywoła się zawsze po inicjalizacji pól, stąd jak kolega pisał- masz gwarancje że FirstName, LastName o ile zostały zdefiniowane, to istnieją. 
w poprzedniej sytuacji, nie masz gwarancji na to, że public string FullName jeśli nie jest wyrażeniem funkcyjnym a polem, to zostanie powołane w odp. kolejności, gdyż  nie bedąc wyrażeniem ono nie mai nformacji jeszcze o innych polach 

Tu masz do poczytania o class-path
 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/classes

Podobne pytania

0 głosów
1 odpowiedź 1,639 wizyt
pytanie zadane 5 grudnia 2020 w Python przez urbanski-paw Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 498 wizyt
pytanie zadane 19 kwietnia 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
+1 głos
2 odpowiedzi 394 wizyt
pytanie zadane 21 października 2021 w C# przez Kamirru9 Początkujący (300 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...