background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

1

5. Klasy autonomiczne

Włodzimierz Kasprzak

Włodzimierz Kasprzak

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

2

Tre

ść

1. Istota programowania obiektowego

2. Klasy i obiekty 

3. Składowe statyczne

4. Kapsułkowanie

5. Obiekty a zmienne referencyjne

6. Klasa 

Object

7. Klasa 

String

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

3

1. Istota programowania obiektowego

„Abstrakcyjne  typy  danych” (klasy) definiowalne  przez 
programist

ę

obiekty jako zmienne tych klas.

Mo

Ŝ

liwo

ść

dziedziczenia klas (klasy pochodne) i 

Wielopostaciowo

ść

(polimorfizm) operacji, 

Ukrywanie  szczegółów  realizacji,  poziomy  dost

ę

pu  do 

składowych klasy (kapsułkowanie, hermetyzacja).

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

4

2. Klasy i obiekty

• Klasa

w j

ę

zyku programowania obiektowego to: 

– Element 

składni 

j

ę

zyka 

opatrzony 

nazw

ą

implementuj

ą

cy  abstrakcyjny  typ  danych  – wyznacza 

pewn

ą

struktur

ę

(agregacj

ę

)  danych  i  jej  mo

Ŝ

liwe 

zachowanie (operacje).

– Definicja  klasy  zawiera  definicj

ę

struktury  danych  (pól, 

własno

ś

ci) i definicje funkcji składowych (metod). 

• Obiekt

jest  instancj

ą

(zmienn

ą

)  klasy.  W  programie  mo

Ŝ

istnie

ć

wiele obiektów jednej klasy.

• Obiekt

posiada:

– To

Ŝ

samo

ść

(dzi

ę

ki której odró

Ŝ

niamy obiekty od siebie), 

– Zachowanie

(operacje 

wyznaczone 

przez 

klas

ę

obiektu), 

– Stan

(własne  dane  o  strukturze  wyznaczonej  przez 

definicj

ę

klasy obiektu).

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

5

Klasa a struktura

• struct

jest przepisem dla warto

ś

ci zmiennej:

– Identyfikator  równowa

Ŝ

ny  warto

ś

ci  zmiennej,  stan 

zmiennej jest bezpo

ś

rednio dost

ę

pny, w strukturach nie

powinno si

ę

definiowa

ć

metod (poza operatorami).

• class

jest przepisem dla obiektu:

– Klasy s

ą

identyfikowalne; stan obiektu nie powinien by

ć

bezpo

ś

rednio  dost

ę

pny;  nale

Ŝ

y  definiowa

ć

metody 

klasy.

struct Time                 

class RachunekBankowy

{                           

{

public int godzina;           

...

public int minuta;          

...

}                           

}

struct Time                 

class RachunekBankowy

{                           

{

public int godzina;           

...

public int minuta;          

...

}                           

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

6

Definiowanie klas autonomicznych

• Wewn

ą

trz klasy definiuje si

ę

jej składowe, Najwa

Ŝ

niejsze 

z nich to pola metody.

• Metody s

ą

zwykle publiczne, dane – zwykle prywatne

class RachunekBankowy
{

public void Wyplata(decimal kwota)
{ ... }
public void Wplata(decimal kwota)
{ ... }
private decimal saldo;
private string klient;

}

class RachunekBankowy
{

public void Wyplata(decimal kwota)
{ ... }
public void Wplata(decimal kwota)
{ ... }
private decimal saldo;
private string klient;

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

7

„partial class”

• W C# 2.0 klas

ę

, struktur

ę

lub interfejs mo

Ŝ

na definiowa

ć

„na 

raty”, w jednym lub w ró

Ŝ

nych plikach 

ź

ródłowych.  Np.

// w pliku plik1.cs:
namespace PC 
{  

public partial class CoOrds{ 

private int x; 
private int y; 
public CoOrds(int x, int y) { 

this.x = x; 
this.y = y; 

}

// w pliku plik1.cs:

namespace PC 
{  

public partial class

CoOrds{ 

private int x; 
private int y; 
public CoOrds(int x, int y) { 

this.x = x; 
this.y = y; 

}

// w pliku plik2.cs:
namespace PC 

public partial class CoOrds { 

public void PrintCoOrds() { 

System.Console.WriteLine(

"CoOrds: {0},{1}", x, y); 

}

// w pliku plik2.cs:

namespace PC 

public partial class

CoOrds { 

public void PrintCoOrds() { 

System.Console.WriteLine(

"CoOrds: {0},{1}", x, y); 

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

8

Dane (stan) obiektu

• Struktura  danych  obiektu  wyznaczona  jest  przez  klas

ę

obiektu.

• Ale  warto

ś

ci  danych  obiektu s

ą

indywidualne dla  ka

Ŝ

dego 

obiektu.

Np.  obiekt  klasy  „RachunekBankowy” posiada  własne 
warto

ś

ci dla pół „saldo” i „klient”.  Tylko  przez  przypadek  te 

warto

ś

ci mog

ą

by

ć

identyczne dla dwóch obiektów.

Wyplata( )

Wplata( )

saldo 12.56

klient

"Bert"

Wyplata( )

Wplata( )

saldo

12.56

klient

"Fred"

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

9

Metody

Definicja metody



Main

jest metodą. Ta sama składnia stosowana jest dla definicji 

innych metod.

using System;

class ExampleClass
{  

static void PrzykladowaMetoda( ) 
{

Console.WriteLine(„To jest metoda");

}
static void Main( ) 
{

// ... 

}

}

using System;

class ExampleClass
{  

static void PrzykladowaMetoda( ) 
{

Console.WriteLine(„To jest metoda");

}
static void Main( ) 
{

// ... 

}

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

10

Wywołanie metody

• Wywoływanie metody w tej samej klasie.

– Poda

ć

nazw

ę

metody  z  list

ą

argumentów  uj

ę

t

ą

w nawiasy. 

• Wywołanie metody z innej klasy

– Nale

Ŝ

y  wskaza

ć

nazw

ę

klasy  do  której  nale

Ŝ

Ŝą

dana metoda

– Wywoływana  metoda  musi  by

ć

dost

ę

pna  –

deklarowana ze słowem kluczowym public

• Mo

Ŝ

na zagnie

Ŝ

d

Ŝ

a

ć

wywołania

– Metoda  wywołuje  inn

ą

metod

ę

,  ta  z  kolei 

jeszcze inn

ą

i tak dalej. 

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

11

Zwracanie wyniku

• Metoda  dla  której 

typ  wyniku

jest  inny  ni

Ŝ

void

musi 

zwróci

ć

wynik.

• W takiej metodzie wyst

ą

pi

ć

musi instrukcja 

return

, która 

zwraca wynik wywołania. Np.:

• Wywołanie metody:

static int TwoPlusTwo( ) {

int a,b;
a = 2;
b = 2;
return a + b;

}

static int TwoPlusTwo( ) {

int a,b;
a = 2;
b = 2;
return a + b;

}

int x;
x = TwoPlusTwo( );
Console.WriteLine(x);

int x;
x = TwoPlusTwo( );
Console.WriteLine(x);

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

12

Instrukcja

return

• Ko

ń

czy  wywołanie  metody  – zwykle  wyst

ę

puje  na 

ko

ń

cu kodu metody. 

• Mo

Ŝ

by

ć

instrukcj

ą

wewn

ę

trzn

ą

instrukcji 

warunkowej

static void PrzykladReturn( )
{

int numBeans;
//...

Console.WriteLine("Hello");  
if (numBeans < 10) 

return;

Console.WriteLine("World");

}

static void PrzykladReturn( )
{

int numBeans;
//...

Console.WriteLine("Hello");  
if (numBeans < 10) 

return;

Console.WriteLine("World");

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

13

U

Ŝ

ycie lokalnych zmiennych

• Lokalne zmienne

– S

ą

tworzone podczas aktywacji i wykonania metody

– S

ą

dost

ę

pne jedynie w tym wywołaniu

– S

ą

usuwane  wraz  z  zako

ń

czeniem  wykonania 

metody

static void przykladLokalneZmienne(int a)
// Parametr a ma charakter lokalny w tej metodzie
{

int num; // Zmienna lokalna w tej metodzie

...

}

static void przykladLokalneZmienne(int a)
// 

Parametr a

ma charakter lokalny w tej metodzie

{

int num; // 

Zmienna lokalna

w tej metodzie

...

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

14

Tworzenie obiektu klasy 

• Definicja zmiennej  dla  zadanej  klasy  nie  jest  jeszcze 

utworzeniem obiektu klasy.

• Do utworzenia obiektu słu

Ŝ

y operator

new

.

class Program
{

static void Main( )
{

Time teraz;
teraz.godzina = 11; 
RachunekBankowy moj = new RachunekBankowy( );
moj.Wplata(999999M);

}

}

class Program
{

static void Main( )
{

Time teraz;
teraz.godzina = 11; 
RachunekBankowy moj = new RachunekBankowy( );
moj.Wplata(999999M);

}

}

godzina
minuta

teraz

moj

...
...

Nowy obiekt klasy
RachunekBankowy

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

15

Słowo kluczowe

this 

• this 

jest referencj

ą

do obiektu, na rzecz którego wywołano 

metod

ę

• this

jest  potrzebne,  gdy  metoda  chce  odwoła

ć

si

ę

do 

stanu tego obiektu

class RachunekBankowy
{   

...
public void UstawNazwe(string nazwa)
{

this.nazwa = nazwa;

}
private string nazwa; 

}

class RachunekBankowy
{   

...
public void UstawNazwe(string nazwa)
{

this.nazwa = nazwa;

}
private string nazwa; 

}

Co by się stało 
dla instrukcji
nazwa = nazwa; ?

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

16

Klasy zagnie

Ŝ

d

Ŝ

one

• Mo

Ŝ

na  definiowa

ć

klas

ę

zagnie

Ŝ

d

Ŝ

on

ą

w  definicji  innej 

klasy

class Program
{

static void Main( )
{

Bank.Rachunek moj = new Bank.Rachunek( );    

}

}
class Bank
{

... class Rachunek { ... }

}

class Program
{

static void Main( )
{

Bank.Rachunek moj = new Bank.Rachunek( );    

}

}
class Bank
{

... class Rachunek { ... }

}

Pełna nazwa klasy zagnieŜdŜonej

zawiera nazwę klasy obejmującej

Pełna nazwa klasy zagnieŜdŜonej

zawiera nazwę klasy obejmującej

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

17

Dost

ę

p do klasy zagnie

Ŝ

d

Ŝ

onej

• Klasy  zagnie

Ŝ

d

Ŝ

one  równie

Ŝ

mog

ą

posiada

ć

dost

ę

prywatny lub publiczny.

class Bank
{

public class Rachunek { ... } // Klasa zagnieŜdŜona
private class GeneratorNumeruRachunku { ... } // Klasa 

// zagnieŜdŜona

}
class Program
{

static void Main( ) {

Bank.Rachunek ...

// nazwa jest tu dostępna;

Bank.GeneratorNumeruRachunku ...// nazwa niedostępna!

}

}

class Bank
{

public class Rachunek { ... }

// Klasa zagnieŜdŜona

private class GeneratorNumeruRachunku { ... }

// Klasa 

// zagnieŜdŜona

}
class Program
{

static void Main( ) {

Bank.Rachunek ...

// nazwa jest tu dostępna;

Bank.GeneratorNumeruRachunku ...

// nazwa niedostępna!

}

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

18

3. Składowe statyczne

• Dane  statyczne  zawieraj

ą

informacje  przeznaczone  dla 

wszystkich obiektów tej samej klasy

• Np.  wszystkie  rachunki  pewnego  typu  dziel

ą

informacj

ę

o stopie oprocentowania. Nie jest dobrym rozwi

ą

zaniem, 

gdy  ka

Ŝ

dy  z  obiektów  zawiera  swoj

ą

kopi

ę

pola 

„stopaProc”.

Wyplata( )

Wplata( )

saldo 12.56

stopaProc 7%

Wyplata( )

Wplata( )

saldo

99.12

stopaProc 7%









background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

19

Zmienne wspólne obiektów

• Zmienne  dzielone  pomi

ę

dzy  obiektami  klasy  – wyznaczone 

s

ą

przez składowe klasy zwane 

polami statycznymi. 

class PrzykladLicznika
{

static int nLicznik; // Pole statyczne – unikalne dla klasy
int num; 

// Pole zwykłe – jedno w kaŜdym obiekcie

static void InitLicznika() {

nLicznik = 0;

}

...
}
...
PrzykladLicznika A, B;
...  // Utworzenie obiektów
PrzykladLicznika.InitLicznika(); // Zeruj nLicznik
A.nLicznik++; //  nLicznik wynosi 1
B.nLicznik++; //  nLicznik wynosi 2

class PrzykladLicznika
{

static

int nLicznik; 

// Pole statyczne – unikalne dla klasy

int num; 

// Pole zwykłe – jedno w kaŜdym obiekcie

static void InitLicznika() {

nLicznik = 0;

}

...
}
...
PrzykladLicznika A, B;
...  

// Utworzenie obiektów

PrzykladLicznika.InitLicznika(); 

// Zeruj nLicznik

A.nLicznik++; 

//  nLicznik wynosi 1

B.nLicznik++; 

//  nLicznik wynosi 2

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

20

Przesłanianie nazw 

• Kompilator  nie  ostrzega,  gdy  wyst

ą

pi konflikt  nazw 

zmiennych lokalnych statycznych. Np.

class PrzykladPrzeslaniania
{

static int numItems = 0; // Pole statyczne
static void Metoda1()
{

int numItems = 42; // Zmienna lokalna –

// przesłania pole statyczne 

...

}
static void Metoda2()
{

numItems = 61; // Odwołanie do pola klasy

}

}

class PrzykladPrzeslaniania
{

static int numItems = 0; 

// Pole statyczne

static void Metoda1()
{

int numItems = 42; 

// Zmienna lokalna –

// przesłania pole statyczne 

...

}
static void Metoda2()
{

numItems = 61; 

// Odwołanie do pola klasy

}

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

21

Metody statyczne

• Statyczne  metody  mog

ą

odwoływa

ć

si

ę

jedynie  do 

danych statycznych.

• Statyczn

ą

metod

ę

wywołuje  si

ę

na  rzecz  klasy  a  nie 

obiektu.

StopaProcentowa( )

stopaProc 7%

Wyplata( )

Wplata( )

saldo

99.12

klient  "Fred"

Obiekt klasy „Rachunek”

Klasa „Rachunek”

Z klasą związane są
dane statyczne i metody statyczne

Poprzez obiekt mamy dostęp do
stanu obiektu i do zwykłych metod 













background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

22

Metody statyczne

• Statyczne  metody  mog

ą

odwoływa

ć

si

ę

jedynie  do 

danych statycznych

class Time
{

...

public static void Reset(Time t)
{

t.hour =0;  // OK 
t.minute = 0; // OK 
hour = 0; // Błąd kompilacji
minute = 0; // Błąd kompilacji

}
private int hour, minute;

}

class Time
{

...

public static void Reset(Time t)
{

t.hour =0;  // OK 
t.minute = 0; // OK 

hour = 0; 

// Błąd kompilacji

minute = 0; 

// Błąd kompilacji

}
private int hour, minute;

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

23

4. Kapsułkowanie – poziomy 

dost

ę

pu do składowych

• Klasa  stanowi  odr

ę

bny 

zakres  definicji  nazw

– stanowi 

swego rodzaju 

kapsuł

ę

:

– Mamy  poł

ą

czenie definicji  danych  i  metod  w  jednej 

kapsule (zakresie klasy)

– Istnieje  wn

ę

trze

kapsuły  (zakresu  klasy)  i  jej 

zewn

ę

trze

Wyplata( )

Wplata( )

saldo

Wyplata( )

Wplata( )

saldo

Tak. RachunekBankowy

.

Czy RachunekBankowy ?

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

24

Kapsułkowanie - kontrola dost

ę

pu

• Metody  s

ą

zwykle  publiczne  (public),  czyli  dost

ę

pne  z 

zewn

ą

trz kapsuły (zakresu klasy)

• Dane s

ą

zwykle  prywatne  (private), czyli  dost

ę

pne 

jedynie z wewn

ą

trz 

Wyplata( )

Wplata( )

saldo

Wyplata( )

Wplata( )

saldo





Pole „saldo” nie jest dostępne z zewnątrz

Wszystko jest dostępne z zewnątrz

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

25

Zalety kapsułkowania

• Pozwala na kontrol

ę

dost

ę

pu

Korzystanie z obiektu jest 
mo

Ŝ

liwe z zewn

ą

trz poprzez 

metody publiczne

• Pozwala na modyfikacje kodu

Sposób korzystania z obiektu 
nie ulega zmianie, je

ś

li 

modyfikujemy jedynie 
prywatne składowe

Wyplata( )

Wplata( )

dollar 12

Wyplata( )

Wplata( )

saldo 12.56

cent   56





background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

26

5. Obiekty a zmienne referencyjne

• Typ dla warto

ś

ci

– Jego 

zmienna 

zawiera  warto

ść

danego typu

– Np: 

charint

42

42

int mol;
mol = 42;

int mol;
mol = 42;

string mol;
mol = "Hello";

string mol;
mol = "Hello";

Hello

Hello



Typ referencyjny



Jego zmienna zawiera 
odniesienie do warto

ś

ci 

(do danej)



Dana jest pami

ę

tana w 

oddzielnym miejscu 
pami

ę

ci

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

27

Definiowanie i zerowanie zmiennej 

referencyjnej

• Definicja zmiennej referencyjnej:

Coordinate c1;         
c1 = new Coordinate(); 
c1.x = 6.12;           
c1.y = 4.2;

Coordinate c1;         
c1 = new Coordinate(); 
c1.x = 6.12;           
c1.y = 4.2;

6.12

6.12

4.2

4.2

c1 = null;

c1 = null;

6.12

6.12

4.2

4.2



Zerowanie zmiennej referencyjnej

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

28

Niezdefiniowane referencje

• Odwołania  realizowane  poprzez  niezainicjalizowane 

referencje s

ą

wykrywane podczas kompilacji – kompilator

wygeneruje bł

ą

d.

• Zerowe  referencje s

ą

wykrywane  podczas  wykonania 

programu - system wygeneruje wyj

ą

tek.

Coordinate c1;         
c1.x = 6.12;  // Błąd: niezainicjowana zmienna

Coordinate c1;         
c1.x = 6.12;  

// Błąd: niezainicjowana zmienna

try {  c1.x = 45;
}
catch (NullReferenceException) {

Console.WriteLine”c1 jest zerowy”); 

}

try {  c1.x = 45;
}
catch (NullReferenceException) {

Console.WriteLine”c1 jest zerowy”); 

}

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

29

Operacje porównania warto

ś

ci i 

referencji

• Porównywanie zmiennych typów dla warto

ś

ci:

– Operatory  == , !=  porównuj

ą

warto

ś

ci .

• Porównywanie zmiennych  referencyjnych  (za  wyj

ą

tkiem 

String):

– Operatory == , !=  porównuj

ą

referencje a nie warto

ś

ci 

– Nie mo

Ŝ

na stosowa

ć

operatorów <, >, <=, >= 

1.0

1.0

2.0

2.0

1.0

1.0

2.0

2.0

RóŜne referencje 
mimo tych samych 
wartości obiektów

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

30

Wielokrotne referencje do jednego 

obiektu

• Dwie  zmienne  referencyjne mog

ą

referowa

ć

ten  sam 

obiekt

Coordinate c1= new Coordinate( );
Coordinate c2;
c1.x = 2.3; c1.y = 7.6;
c2 = c1;
Console.WriteLine(c1.x + " , " + c1.y);
Console.WriteLine(c2.x + " , " + c2.y);

Coordinate c1= new Coordinate( );
Coordinate c2;
c1.x = 2.3; c1.y = 7.6;
c2 = c1;
Console.WriteLine(c1.x + " , " + c1.y);
Console.WriteLine(c2.x + " , " + c2.y);

2.3

2.3

7.6

7.6

c1

c2

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

31

6. Klasa 

Object

. Typ 

object

.

• Typ 

object

jest  synonimem klasy 

System.Object

– jest  to 

bazowa klasa wszystkich klas j

ę

zyka C# .

• Wszystkie  klasy  dziedzicz

ą

(jawnie  lub  niejawnie)  klas

ę

Object

.

Exception

Exception

SystemException

SystemException

MojaKlasa

MojaKlasa

Object

Object

String

String

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

32

Wspólne metody wszystkich klas

• Klasa 

Object

posiada  metody  dziedziczone  przez 

wszystkie klasy w C# : 

– ToString  – konwersja  obiektu  na  String – domy

ś

lna 

definicja  w  klasie  Object zwraca  nazw

ę

typu  dla 

obiektu.

– Equals – porównuje dwie referencje do obiektów

– GetType – podaje informacj

ę

czasu wykonania o typie

– Finalize – metoda wołana przed usuni

ę

ciem obiektu

Punkt p = new Punkt(); 
Console.WriteLine(p.ToString()); // Wyprowadzi napis: „Punkt”

Punkt p = new Punkt(); 
Console.WriteLine(p.ToString()); 

// Wyprowadzi napis: „Punkt”

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

33

7. Klasa

String

• Typ 

string

-

przeznaczony  do  reprezentacji  sekwencji 

znaków (napisów) w

Unikodzie

• Jest to skrótowa nazwa dla klasy

System.String

• Reprezentuje 

niemodyfikowalne napisy 

• Klasa 

StringBuilder

wspomaga  operacje  na 

String-

ach –

reprezentuje 

wewn

ę

trznie 

modyfikowalne 

napisy, 

zamieniane na koniec na napisy typu 

string

string s = "Hello";
...
s[0] = 'c'; // Błąd kompilacji – próba zmiany napisu 

string s = "Hello";
...
s[0] = 'c'; 

// Błąd kompilacji –

próba zmiany napisu 

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

34

Metody klasy

String

• Indeksowanie [ ]

• Insert -

wstawianie

• Własno

ść

Length

• Copy -

kopiowanie

• Concat -

poł

ą

czenie

string s = "Alfabet";
char znak= s[2]; // ‘f’

string s = "Alfabet";
char znak= s[2]; // ‘f’

string s = "On jest wielki";
s = s.Insert(3, "nie "); 
Console.WriteLine(s); // „On nie jest wielki”

string s = "On jest wielki";
s = s.Insert(3, "nie "); 
Console.WriteLine(s); // „On nie jest wielki”

string msg = "Hello";
int dlug = msg.Length; // 5

string msg = "Hello";
int dlug = msg.Length; // 5

string s1 = "Hello";
string s2 = String.Copy(s1);

string s1 = "Hello";
string s2 = String.Copy(s1);

string s = String.Concat("a", "b", "c");

string s = String.Concat("a", "b", "c");

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

35

Metody klasy

String

• Trim

– usuwa poprzedzaj

ą

ce i ko

ń

cz

ą

ce spacje

• ToUpper

,

ToLower

– zamiana na „du

Ŝ

e” i „małe” litery

string s = " Hello ";
s = s.Trim();
Console.WriteLine(s); // Hello

string s = " Hello ";
s = s.Trim();
Console.WriteLine(s); 

// Hello

string sT = "Przedmiot Jimp";
Console.WriteLine(sT.ToUpper( )); // PRZEDMOT JIMP
Console.WriteLine(sT.ToLower( )); // przedmiot jimp

string sT = "Przedmiot Jimp";
Console.WriteLine(sT.ToUpper( )); 

// PRZEDMOT JIMP

Console.WriteLine(sT.ToLower( )); 

// przedmiot jimp

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

36

Porównania napisów

• Operatory 

== 

i  

!=

mog

ą

by

ć

stosowane dla porównania 2  

napisów typu 

string

• Metoda 

Equals 

( 2 wersje – klasowa i zwykła)

• ==

jest  równowa

Ŝ

ne 

String.Equals

;

!=

jest  równowa

Ŝ

ny 

!String.Equals

string a = "Test";
string b = "Test";
if (a == b) ...   // Wynik porównania: true

string a = "Test";
string b = "Test";
if (a == b) ...   // Wynik porównania: true

background image

W.Kasprzak: JiPP 3 

5. Klasy autonomiczne

37

Porównania napisów

• Metoda 

Compare –

sprawdza  kolejno

ść

leksykograficzn

ą

Zwraca ujemn

ą

warto

ść

, zero lub dodatni

ą

warto

ść

.

Np. 

string s1 = ”Ala”;

string s2 = ”Jola”;

int comp = String.Compare(s1, s2); 

// wynik ujemny

• 3-argumentowa  wersja 

Compare

ignoruj  lub  nie 

rozró

Ŝ

nienie „du

Ŝ

e / małe” litery.

Np. 

string s1 = ”Ala”;

string s2 = ”ala”;

int comp =String.Compare(s1,s2, true); 

//ignoruj róŜnicę

„a” „A”