Cvičení – přidání s implicitní převodem dat

Dokončeno

Často budete chtít provádět matematické operace s číselnými daty. V této lekci začnete s přidáním a rozbalíte další operace v další lekci, protože existuje důležitá lekce, která vám umožní zjistit, jak kompilátor jazyka C# parsuje a interpretuje váš kód.

Přidání dvou číselných hodnot

Pokud chcete sečíst dvě čísla, použijete operátor sčítání, což je symbol +plus . Ano, stejný symbol plus +, který jste používali ke spojování řetězců, se používá i ke sčítání. Použití jednoho symbolu k více účelům se někdy označuje jako „přetížení operátoru“. V jazyce C# se s ním často setkáte.

V tomto případě kompilátor jazyka C# pozná, co chcete udělat. Kompilátor parsuje váš kód a vidí, že na každé straně + (operátoru) je jedna číselná hodnota (operandy). Vzhledem k datovým typům proměnných (obě jsou typu int) si vyhodnotí, že jste chtěli přidat tyto dvě hodnoty.

  1. Do editoru .NET zadejte následující kód:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. Spusťte kód a v konzole výstupu uvidíte následující výsledek:

    19
    

Smíchání datových typů kvůli vynucení implicitního převodu typů

Co se stane, když se pokusíte použít + symbol s oběma string hodnotami?int

  1. Upravte kód, který jste napsali, tak, aby odpovídal následujícímu kódu:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. Spusťte kód a v konzole výstupu uvidíte následující výsledek:

    Bob sold 7 widgets.
    

V tomto případě kompilátor jazyka C# rozumí tomu, že chcete použít + symbol ke zřetězení dvou operandů. Usoudí tak z toho důvodu, že symbol + se nachází mezi operandy, které mají datové typy string a int. Proto se pokusí proměnnou widgetsSold typu int implicitně (a dočasně) převést na typ string, aby ji mohl spojit se zbytkem řetězce. Kompilátor jazyka C# se vám snaží pomáhat, jak jen může, ale raději byste ho měli o svých záměrech explicitně informovat.

Pokus o složitější případ sčítání čísel a spojování řetězců

  1. Upravte kód, který jste napsali, tak, aby odpovídal následujícímu kódu:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. Spusťte kód a v konzole výstupu uvidíte následující výsledek:

    Bob sold 77 widgets.
    

Kompilátor nesečte proměnnou widgetsSold typu int s literálem 7 typu int, ale považuje všechno za řetězce, které spojí je dohromady.

Přidání závorek pro objasnění záměru kompilátoru

  1. Upravte kód, který jste napsali, tak, aby odpovídal následujícímu kódu:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. Spusťte kód a v konzole výstupu uvidíte následující výsledek:

    Bob sold 14 widgets.
    

Ze symbolu závorek () se stane další přetížený operátor. Levá a pravá závorka tvoří v tomto případě operátor pořadí operací – podobně jako v matematickém vzorci. Označujete, že chcete, aby se většina závorek vyřešila jako první, výsledkem je sčítání int hodnot widgetsSold a hodnota 7. Výsledek sčítání se pak implicitně převede na řetězec, aby se mohl spojit se zbývajícími částmi zprávy.

Poznámka:

Provádění výpočtů a zřetězení v jediném řádku kódu byste se měli spíše vyhnout. Naším cílem je pomoci vám pochopit způsob, jak rozumí operátorům a operandům kompilátor.

Rekapitulace

Tady je, co jste se zatím naučili o matematických operacích v jazyce C#:

  • S čísly můžete provádět matematické operaci, jako je sčítání.
  • Znaménko plus + se používá jak ke spojování, tak ke sčítání řetězců. Tomuto stavu se říká přetížení operátoru. Kompilátor odvodí správný způsob použití operátoru podle použitých datových typů operandů.
  • Pokud je zřejmé, že se vývojář snaží spojit řetězcovou reprezentaci čísla s jiným řetězcem pro účely prezentace, tak kompilátor jazyka C# implicitně převede typ int na typ string (když je to možné).
  • Pomocí závorek definujte pořadí operací, abyste explicitně řekli kompilátoru, že chcete provést určité operace před jinými operacemi.