background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

1

JiPP3

3. Zmienne i operacje typów 

prostych

Włodzimierz Kasprzak

Włodzimierz Kasprzak

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

2

Układ

1.

Wbudowane typy danych

2.

Nazwy zmiennych

3.

Typy wbudowane i operacje

4.

Typy „proste” definiowane przez programistę

5.

Konwersje typów

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

3



1. Typy danych

Wśród 

typów wbudowanych

języka wyróŜnia się



typy proste (value-type, typ dla wartości) i 



typy referencyjne.

Typ referencyjny

Typ referencyjny

Typ wbudowany j

ę

zyka

(mechanizm CTS)

Typ wbudowany j

ę

zyka

(mechanizm CTS)

Typ prosty

Typ prosty

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

4

Porównanie typów wbudowanych



Zmienna typu prostego:



Zawiera swoją wartość.



KaŜda zmienna typu 
prostego odnosi się do 
swojego, unikalnego 
miejsca w pamięci.



Operacja wykonywane 
na zmiennej nie 
wpływają na inne 
zmienne.



Zmienna referencyjna:



Zawierają odniesienia 
(ukryte adresy) do swoich 
danych (obiektów).



Dwie zmienne referencyjne 
mogą odnosić się do tego 
samego obiektu. 



Operacje na jednej 
zmiennej mogą wpływać na 
inne. 

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

5

Typy dla wartości - wbudowane lub programisty



Np.:



int



float



Np.:



enum



struct

Typy programisty

Typy programisty

Typy dla wartości

Typy dla wartości

Typy wbudowane

Typy wbudowane

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

6

Typy proste – wbudowane typy dla wartości



Rozpoznawane dzięki słowom kluczowym języka:



int // Słowo kluczowe języka – alias typu 

struct

- lub odpowiadających im nazwom, np.  -



System.Int32 // Nazwa typu 

struct

zdefiniowana 

// w obszarze nazw 

System



Słowa  kluczowe  typów  prostych  stanowią synonimy  nazw 
definiowanych  jako  stuktury w  standardowym  obszarze 
nazw 

System

jezyka

C#.

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

7

Typy proste – wbudowane typy dla wartości



Słowo kluczowe dla typu i odpowiedni typ strukt

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

8



2. Nazwy zmiennych



Zasady tworzenia nazw



Stosujemy litery, znak podkreślenia i cyfry.



Rozpoczyna się literą lub znakiem 

podkreślenia.



Konwencje:



Wyłącznie duŜe litery tylko dla nazw 

stałych symbolicznych.



Nie rozpoczynaj od podkreślenia.



Unikaj skrótów w nazwach.



Stosuj duŜe litery dla rozpoczęcia słowa w 

wielosłowowych nazwach. 



Nazwy pól klasy i parametrów rozpoczynaj 

małą literą. Pozostałe nazwy rozpoczynaj 

duŜą literą.

different
Different

different
Different

Answer42
42Answer

Answer42
42Answer

















BADSTYLE
_poorstyle
BestStyle

BADSTYLE
_poorstyle
BestStyle













Msg
Message

Msg
Message









background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

9

Słowa kluczowe C#



Słowa kluczowe są zarezerwowanymi nazwami



Nie moŜna re-definiować słów kluczowych



spowoduje błąd kompilacji.



Unikaj nazw róŜniących się od słów kluczowych jedynie 
rozmiarem liter, np.

abstract, base, bool, default, if, finally

abstract, base, bool, default, if, finally

int INT;  // Z

ł

y styl

int INT;  // Z

ł

y styl

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

10

Słowa kluczowe C#

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

11

Test. Które nazwy są niepoprawne i dlaczego?

char $diskPrice;

char $diskPrice;

char middleInitial;

char middleInitial;

int 12count;

int 12count;

float this;

float this;

2

2

2

3

3

3

4

4

4

1

1

1

int __identifier;

int __identifier;

5

5

5

Błąd

Błąd

Poprawne

Błąd

Poprawne

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

12



3. Typy wbudowane i operacje



Instrukcje deklaracji zmiennych:



Wiele nazw w jednej instrukcji:

-- lub --

int itemCount;

int itemCount;

int itemCount, employeeNumber;

int itemCount, employeeNumber;

int itemCount,

employeeNumber;

int itemCount,

employeeNumber;

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

13

Nadanie wartości zmiennej



Poprzez operację przypisania do wcześniej zdefiniowanych 
zmiennych:



Poprzez inicjalizację w miejscu definicji zmiennej:



Nie moŜna odwoływać się do wartości niezainicjalizowanej 
zmiennej.

int employeeNumber;

employeeNumber = 23;

int employeeNumber;

employeeNumber = 23;

int employeeNumber = 23; 

int employeeNumber = 23; 

char middleInitial = 'J'; 

char middleInitial = 'J'; 

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

14

Rozszerzone operacje przypisania



Operacja dodawania wartości do zmiennej:



Taka operacja moŜe być teŜ zapisana krótko:



Rozszerzone operacje przypisania występują dla 
wszystkich operacji arytmetycznych, np..:

itemCount = itemCount + 40;

itemCount = itemCount + 40;

itemCount += 40;

itemCount += 40;

itemCount -= 24; 

itemCount -= 24; 

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

15

Podstawowe operatory

Podstawowe Operatory

Podstawowe 

Podstawowe 

Operator

Operator

y

y

Równościowe

Porównania

Logiczne

Inkrementacja

Dekrementacja

Arytmetyczne

Przypisania

Przyk

Przyk

ł

ł

ad

ad

==  != 

<  >  <=  >=  is

&&  ||  ?: 

++

- -

+  - *  /  %

=  *=  /=  %=  +=  -=  <<=  

>>=  &=  ^=  |=

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

16

Inkrementacja i dekrementacja



Zmiana wartości zmiennej o jeden



Skrótowy zapis w postaci operacji inkrementacji lub 
dekrementacji



Te 

operacje 

występują

postaciach: 

przedrostkowej i przyrostkowej

itemCount += 1;
itemCount -= 1;

itemCount += 1;
itemCount -= 1;

itemCount++;
itemCount--;

itemCount++;
itemCount--;

++itemCount;
--itemCount;

++itemCount;
--itemCount;

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

17

Inkrementacja i dekrementacja



Te  operacje  są rozszerzonymi  przypisaniami  –
zwracają wynik:



RóŜnica  między  przedrostkową a  przyrostkową
wersją operatora: 

int itemCount = 0;
Console.WriteLine(itemCount += 2); // Wyprowadzi 2
Console.WriteLine(itemCount -= 2); // Wyprowadzi 0

int itemCount = 0;
Console.WriteLine(itemCount += 2); // Wyprowadzi 2
Console.WriteLine(itemCount -= 2); // Wyprowadzi 0

int itemCount = 42;
int prefixValue = ++itemCount; // prefixvalue = 43
int postfixValue = itemCount++;//postfixvalue = 43

int itemCount = 42;
int prefixValue = ++itemCount; // prefixvalue = 43
int postfixValue = itemCount++;//postfixvalue = 43

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

18

Wiązanie i priorytet operatora



Wiązanie operatora w wyraŜeniu złoŜonym



Za  wyjątkiem  operatorów  przypisania  wszystkie 
operatory 

2-argumentowe 

posiadają

wiązanie 

lewostronne. 



Operatory przypisania i 3-argumentowy (?:)  posiadają
wiązanie prawo-stronne. 

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

19



4. Typy „proste” definiowane przez 

programistę

Typy 

„dla 

wartości”

definiowane 

przez 

programistę:



Typy wyliczeniowe



Struktury

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

20

Typy wyliczeniowe



Definicja typu wyliczeniowego



Zmienna typu wyliczeniowego



Korzystanie ze zmiennej

enum Color { Red, Green, Blue }//Nada wartości 0,1,2

enum Color { Red, Green, Blue }//Nada wartości 0,1,2

Color colorPalette = Color.Red; 

Color colorPalette = Color.Red; 

Console.WriteLine(“{0}”, colorPalette);//Wyświetli Red 

Console.WriteLine(“{0}”, colorPalette);//Wyświetli Red 

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

21

Struktury



Definicja typu strukturalnego



Zmienna typu strukturalnego (struktura)



Zmienne  typów  strukturalnych  traktowane  są w  C#  tak,  jak 
zmienne  innych  typów    dla  wartości  – alokowane  są w  obszarze 
stosu danych, a nie w pamięci dynamicznej danych programu.

Employee companyEmployee; 
companyEmployee.firstName = "Joe";
companyEmployee.age = 23; 

Employee companyEmployee; 
companyEmployee.firstName = "Joe";
companyEmployee.age = 23; 

public struct Employee
{

public string firstName;
public int age;

}

public struct Employee
{

public string firstName;
public int age;

}

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

22



5. Konwersje typów danych



Niejawne konwersje



Jawne konwersje

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

23

Niejawne konwersje typów



Konwersja z

int

do 

long

:



Niejawne konwersje 

nie kończą się błędem



MoŜna utracić precyzję ale nie przekroczymy zakresu

using System;
class Test
{

static void Main( ) 

{

int intValue = 123;
long longValue = intValue; // Konwersja niejawna
Console.WriteLine("(long) {0} = {1}", intValue, 

longValue);
}

}

using System;
class Test
{

static void Main( ) 

{

int intValue = 123;
long longValue = intValue;

// Konwersja niejawna

Console.WriteLine("(long) {0} = {1}", intValue, 

longValue);
}

}

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

24

Jawne konwersje typów



Wymaga uŜycia wyraŜenia konwersji typu:



Takie  konwersje  mogą zakończyć się błędem.  Np.  W  powyŜszym 
przykładzie  wystąpi 

błąd  przekroczenia  zakresu

– wynik  będzie 

postaci:

(int) 9223372036854775807 





 -1

using System;
class Test
{

static void Main( ) 

{

long longValue = Int64.MaxValue;
int intValue = (int) longValue; // Jawna konwersja
Console.WriteLine("(int) {0} = {1}", longValue, 

intValue);
}

using System;
class Test
{

static void Main( ) 

{

long longValue = Int64.MaxValue;
int intValue = 

(int)

longValue;

// Jawna konwersja

Console.WriteLine("

(int)

{0} = {1}", longValue, 

intValue);
}

background image

W.Kasprzak: JiPP3

3. Zmienne i operacje

25

Jawne konwersje typów



W  poprzednim  przykładzie  program  przeszedł „do  porządku”
nad  błędem  przekroczenia  zakresu.  Aby  został zgłoszony 
wyjątek  tego  typu  naleŜy  uŜyć bloku  ze  słowem  kluczowym 

checked

: