Ćwiczenie — wykonywanie dodawania za pomocą niejawnej konwersji danych

Ukończone

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.

  1. Wprowadź następujący kod w edytorze .NET:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. 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 ?

  1. Zmodyfikuj napisany kod, aby był zgodny z następującym kodem:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. 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

  1. Zmodyfikuj napisany kod, aby był zgodny z następującym kodem:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. 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

  1. Zmodyfikuj napisany kod, aby był zgodny z następującym kodem:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. 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 typ string, 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.