Ćwiczenie — wykonywanie dodawania za pomocą niejawnej konwersji danych
Często należy wykonywać operacje matematyczne na danych liczbowych. Zaczniesz od dodania w tej lekcji i rozszerzysz do innych operacji w następnej lekcji, ponieważ istnieje ważna lekcja, aby dowiedzieć się, jak kompilator języka C# analizuje i interpretuje kod.
Dodaj dwie wartości liczbowe
Aby dodać dwie liczby razem, użyjesz operatora dodawania, który jest symbolem +
plus . Tak, ten sam symbol plus +
, który służy do łączenia ciągów, jest również używany w dodawaniu. Używanie jednego symbolu do wielu celów jest czasami nazywane „przeciążeniem operatora” i jest często spotykane w języku C#.
W tym przypadku kompilator języka C# rozumie, co próbujesz zrobić. Kompilator analizuje kod i widzi, że operator +
jest otoczony dwoma wartościami liczbowymi (operandami). Biorąc pod uwagę typy danych zmiennych (obydwie to int
), wnioskuje, że chcesz dodać te dwie wartości.
Wprowadź następujący kod w edytorze .NET:
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
Uruchom kod i zobaczysz następujący wynik w konsoli danych wyjściowych:
19
Pomieszaj typy danych w celu wymuszenia niejawnych konwersji typu
Co się stanie, jeśli spróbujesz użyć symbolu +
z wartościami string
i int
?
Zmodyfikuj napisany kod, aby był zgodny z następującym kodem:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
Uruchom kod i zobaczysz następujący wynik w konsoli danych wyjściowych:
Bob sold 7 widgets.
W tym przypadku kompilator języka C# rozumie, że chcesz używać symbolu +
do łączenia dwóch operandów. Wywnioskowuje to, ponieważ symbol +
jest otoczony operandami o typach danych string
i int
. Dlatego próbuje niejawnie przekonwertować zmienną widgetsSold
typu int
na tymczasową wartość string
, aby można było połączyć ją z resztą ciągu. Kompilator języka C# próbuje Ci pomóc, kiedy tylko może, ale najlepiej jest jawnie sygnalizować swoje zamiary.
Wypróbuj bardziej zaawansowane dodawanie liczb i łączenie ciągów
Zmodyfikuj napisany kod, aby był zgodny z następującym kodem:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
Uruchom kod i zobaczysz następujący wynik w konsoli danych wyjściowych:
Bob sold 77 widgets.
Zamiast dodawać zmienną widgetsSold
typu int
do literału typu int
o wartości 7
, kompilator traktuje wszystko jako ciąg i łączy ze sobą.
Dodawanie nawiasów w celu wyjaśnienia zamiaru kompilatora
Zmodyfikuj napisany kod, aby był zgodny z następującym kodem:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
Uruchom kod i zobaczysz następujący wynik w konsoli danych wyjściowych:
Bob sold 14 widgets.
Symbol nawiasu ()
staje się kolejnym przeciążonym operatorem. W tym przypadku nawiasy otwierający i zamykający tworzą operator kolejności wykonywania działań, tak samo jak we wzorze matematycznym. Wskazujesz, że chcesz, aby nawiasy wewnętrzne najbardziej rozwiązane jako pierwsze, co spowodowało dodanie int
wartości widgetsSold
i wartość 7
. Po obliczeniu tego nastąpi niejawna konwersja wyniku na ciąg, aby można było go połączyć z resztą komunikatu.
Uwaga
Należy raczej unikać wykonywania obliczeń i łączenia w jednym wierszu kodu. W tym miejscu celem jest zaprezentowanie, jak operatory i operandy są widziane przez kompilator.
Podsumowanie
Poniżej przedstawiono zdobytą wiedzę na temat operacji matematycznych w języku C#:
- Na liczbach można wykonywać działania matematyczne, takie jak dodawanie.
- Zarówno przy łączeniu ciągów, jak i dodawaniu jest używany symbol plusa
+
. Jest to nazywane przeciążeniem operatora i kompilator wnioskuje o jego właściwym użyciu na podstawie typów danych, na których działa. - Gdy to możliwe, kompilator języka C# będzie niejawnie konwertować typ
int
na typstring
, jeśli będzie oczywiste, że deweloper próbuje połączyć ciąg reprezentujący liczbę do celów prezentacji. - Użyj nawiasów, aby zdefiniować kolejność operacji, aby jawnie poinformować kompilator, że chcesz wykonać określone operacje przed innymi operacjami.