12. Własności w klasie.
Indeksowanie obiektu.
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
1
obiektu.
1.
Własności w klasie
2.
Indeksowanie obiektu
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
2
obiektu.
Własności zapewniają pośredni dostęp do pól klasy:
Akcesor get – dostęp w trybie odczytu własności;
Akcesor set – dostęp w trybie zapisu własności.
c
c l
l a
a s
s s
s
B
B u
u t
t t
t o
o n
n
{
{
p
p u
u b
b l
l i
i c
c s
s t
t r
r i
i n
n g
g
C
C a
a p
p t
t i
i o
o n
n //// W
Włła
a s
s n
n o
o ś
ś ć
ć (
( w
wiid
d o
o c
c z
z n
n a
a z
z z
z e
e w
w n
n ą
ąttr
r z
z )
)
{
{
g
g e
e t
t
{
{
r
r e
e t
t u
u r
r n
n
c
c a
a p
p t
t i
i o
o n
n ;
;
}
}
//// A
A k
k c
c e
e s
s o
o r
r –
– n
niie
ejja
a w
w n
n y
y d
d o
o s
sttę
ę p
p
s
s e
e t
t
{
{
c
c a
a p
p t
t i
i o
o n
n
=
=
v
v a
a l
l u
u e
e ;
;
}
} //// A
A k
k c
c e
e s
s o
o r
r -
- n
niie
ejja
a w
w n
n y
y d
d o
o s
sttę
ę p
p
}
}
p
p r
r i
i v
v a
a t
t e
e s
s t
t r
r i
i n
n g
g
c
c a
a p
p t
t i
i o
o n
n ;
;
//// P
P o
olle
e w
w e
e w
w n
n ę
ęttr
r z
z n
n e
ejj r
r e
e p
p r
r e
e z
z e
e n
ntta
a c
cjjii
}
}
Własności zapewniają ukrycie struktury danych obiektu klasy wewnątrz zasięgu tej klasy - rozdzielenie fizycznej reprezentacji danych od typów dostępu do nich przez zewnętrznych użytkowników danej klasy, co daje elastyczność korzystania i możliwość zmiany klasy bez zmiany kodów zewnętrznych.
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
3
obiektu.
Porównanie: własności a pola i metody
Własności są „logicznie polami”:
Można pobrać wartość lub nadać wartość własności.
Deklaracja i sposób korzystania z własności są identyczne jak dla pola klasy.
Różnice pomiędzy własnością a polem:
Własność nie ma struktury danych, nie ma adresu.
Własności nie mogą być parametrami referencyjnymi metod ( ref lub out ).
Własności przypominają metody:
Posiadają wykonywalny kod.
Zapewniają dostęp do prywatnych pól.
Mogą być deklarowane ze słowami: virtual, abstract, override
Różnice pomiędzy własnością a metodą:
Własność nie korzysta z nawiasów w celu wywołania, nie może mieć wyniku typu void ani dowolnych parametrów
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
4
obiektu.
Własności „odczyt / zapis”
Posiadają akcesory get i set jednocześnie.
Własność „tylko do odczytu”
Posiadają jedynie akcesor get, ale nie są stałymi.
Własności „tylko do zapisu” (ograniczona użyteczność)
Posiadają akcesor set .
Własności statyczne
Są to własności klasowe i mogą odwoływać się jedynie do danych statycznych.
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
5
obiektu.
p
p u
u b
b l
l i
i c
c
c
c l
l a
a s
s s
s
C
C o
o n
n s
s o
o l
l e
e
{
{
p
p u
u b
b l
l i
i c
c
s
s t
t a
a t
t i
i c
c T
T e
e x
x t
t R
R e
e a
a d
d e
e r
r I
I n
n //// W
Włła
a s
s n
n o
o ś
ś ć
ć s
stta
atty
y c
c z
z n
n a
a
{
{
g
g e
e t
t {
{
i
i f
f
(
( r
r e
e a
a d
d e
e r
r
=
= =
=
n
n u
u l
l l
l )
)
{
{
r
r e
e a
a d
d e
e r
r
=
=
n
n e
e w
w
S
S t
t r
r e
e a
a m
m R
R e
e a
a d
d e
e r
r (
( .
. .
. .
. )
) ;
;
}
}
r
r e
e t
t u
u r
r n
n
r
r e
e a
a d
d e
e r
r ;
;
}
}
}
}
.
. .
. .
.
p
p r
r i
i v
v a
a t
t e
e
s
s t
t a
a t
t i
i c
c T
T e
e x
x t
t R
R e
e a
a d
d e
e r
r r
r e
e a
a d
d e
e r
r
=
=
n
n u
u l
l l
l ;
; //// P
P o
olle
e
}
}
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
6
obiektu.
Indekser korzysta z mechanizmu własności w celu zapewnienia dostępu do obiektu jak do tablicy danych.
Jest to pożyteczny sposób reprezentacji własności będącej tablicą danych.
Indekser
definiowany jest jako własność o nazwie this
posiadająca indeks określonego typu.
Korzystanie z indeksera – notacja tablicowa w celu odczytu lub zapisu własności o podanym indeksie.
Różnice pomiędzy indekserem a własnością:
Indekser musi posiadać przynajmniej jeden jawny parametr –
indeks określonego typu (nie ref, out);
Indekser może być przeciążany, ale nie może być statyczny.
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
7
obiektu.
Porównanie indeksera z tablicą
Podobne jest korzystanie z nich – korzystają z notacji tablicowej.
Różnice:
Indeksery mogą korzystać z indeksów o typach innych niż
integer.
Indekser może być przeciążony – różne indeksery w klasie muszą posiadać indeksy będące różnych typów.
Indekser nie jest zmienną, nie referuje on miejsca pamięci i nie może być przekazany jako parametr referencyjny metody (ref lub out) .
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
8
obiektu.
W klasie String (której obiekt nie może być zmieniany) zdefiniowano indekser posiadający jedynie akcesor get (nie posiadający akcesora set).
c
c l
l a
a s
s s
s
S
S t
t r
r i
i n
n g
g
{
{
p
p u
u b
b l
l i
i c
c
c
c h
h a
a r
r
t
t h
h i
i s
s [
[ i
i n
n t
t i
i n
n d
d e
e x
x ]
]
{
{
g
g e
e t
t {
{
i
i f
f
(
( i
i n
n d
d e
e x
x
<
<
0
0
|
| |
|
i
i n
n d
d e
e x
x
>
> =
=
L
L e
e n
n g
g t
t h
h )
)
t
t h
h r
r o
o w
w
n
n e
e w
w
I
I n
n d
d e
e x
x O
O u
u t
t O
O f
f R
R a
a n
n g
g e
e E
E x
x c
c e
e p
p t
t i
i o
o n
n (
(
)
) ;
;
.
. .
. .
.
}
}
}
}
.
. .
. .
.
}
}
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
9
obiektu.
Przykład: indekser w klasie BitArray
c
c l
l a
a s
s s
s
B
B i
i t
t A
A r
r r
r a
a y
y
{
{
p
p u
u b
b l
l i
i c
c
b
b o
o o
o l
l t
t h
h i
i s
s [
[ i
i n
n t
t i
i n
n d
d e
e x
x ]
]
{
{
g
g e
e t
t
{
{
B
B o
o u
u n
n d
d s
s C
C h
h e
e c
c k
k (
( i
i n
n d
d e
e x
x )
) ;
;
r
r e
e t
t u
u r
r n
n (
( b
b i
i t
t s
s [
[ i
i n
n d
d e
e x
x
>
> >
>
5
5 ]
]
&
&
(
( 1
1
<
< <
<
i
i n
n d
d e
e x
x )
) )
)
!
! =
=
0
0 ;
;
}
}
s
s e
e t
t {
{
B
B o
o u
u n
n d
d s
s C
C h
h e
e c
c k
k (
( i
i n
n d
d e
e x
x )
) ;
;
i
i f
f
(
( v
v a
a l
l u
u e
e )
)
{
{
b
b i
i t
t s
s [
[ i
i n
n d
d e
e x
x
>
> >
>
5
5 ]
]
|
| =
=
(
( 1
1
<
< <
<
i
i n
n d
d e
e x
x )
) ;
;
}
}
e
e l
l s
s e
e
{
{
b
b i
i t
t s
s [
[ i
i n
n d
d e
e x
x
>
> >
>
5
5 ]
]
&
& =
=
~
~ (
( 1
1
<
< <
<
i
i n
n d
d e
e x
x )
) ;
;
}
}
}
}
}
}
p
p r
r i
i v
v a
a t
t e
e
i
i n
n t
t [
[
]
]
b
b i
i t
t s
s ;
;
}
}
W. Kasprzak: JiMP3
12. Własność w klasie. Indeksowanie
10
obiektu.