Niz je skup podataka istog tipa. Nizovi su indeksirani tako što prvi elemenat niza ima indeks 0, drugi 1 itd. Nizovi su objekti i moraju se instancirati. Pored jednodimenzionalnog niza koriste se i višedimenzionalni nizovi. Na primer dvodimenzionalni niz se može posmatrati kao pravougaona matrica gde se svaki element niza može označiti sa a[i,j] gde je i indeks vrste te matrice baziran na nuli a j indeks kolone te matrice takođe baziran na nuli. Tj. elemenat a[i,j] dvodimenzionalnog niza nalazi se na preseku i-te vrste i j-te kolone.
Kreiranje niza
U nastavku predstavljeno je deklarisanje celobrojnog niza označenog sa mojCelobrojniNiz.
int[ ] mojCelobrojniNiz ;
Pošto je niz objekat on se mora instancirati. Zatim prikazano je instanciranje ovog celobrojnog niza. Ovde se alocira prostor za 5 celih brojeva.
mojCelobrojniNiz = new int[5];
Sledi prikaz istovremenog deklarisanja i instanciranja tog istog celobrojnog niza.
int[ ] mojCelobrojniNiz = new int[5];
I na kraju je prikazana inicijalizacija članova niza. Niz se istovremeno deklariše instancira i inicijalizuje.
int[ ] mojCelobrojniNiz = new int[5] {1,2,5,6,7};
Ako se niz inicijalizuje ne mora da se eksplicitno instancira kao što je to urađeno sa nizom mojCelobrojniNiz1.
int[ ] mojCelobrojniNiz1 = {5,5,6,7,8};
Pošto je tip object referentni tip iz koga su izvedeni svi ostali tipovi podataka u programskom jeziku C# u promenljivu tipa object se može smestiti vrednost bilo kog drugog tipa podataka. Ova operacija naziva se boxing. U primeru je predstavljen boxing celobrojne promenljive u tip object.
int x = 25;
object boxedValue = (object) x ;
int y = (int) boxedValue ;
Treba napomenuti da eksplicitna konverzija u object nije neophodna (kastovanje (object)). Operacija izdvajanja u ovom slučaju celobrojnog dela iz promenljive tipa object naziva se unboxing. Zahvaljujući osobinama boxinga i unboxinga u programskom jeziku C# je moguće kreirati nizove objekata pri čemu objekti niza sadrže promenljive različitog tipa. Ovakva situacija je predstavljena u nastavku kao:
object[] nizObjekata = new object[3];
nizObjekata[0] = 'A';
nizObjekata[1] = 2.34M;
nizObjekata[2] = 34;
char x = (char)nizObjekata[0];
decimal y = (decimal)nizObjekata[1];
int z = (int) nizObjekata[2];
Naredba foreach ponavlja ugrađenu naredbu ili grupu naredbi za svaki elemenat niza. Foreach naredba se može protumačiti na sledeći način: Svaki ceo broj koji je član niza numbers štampaj na standardnom izlazu. Odnosno sve članove niza numbers štampaj na standardnom izlazu.
int[ ] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers)
{
Console.WriteLine(i);
}
U nastavku je prikazana metoda sum neke klase. Metoda kao ulazni paremetar ima celobrojni niz a vraća zbir članova tog niza.
public int sum(int[] list)
{
int total = 0;
foreach ( int i in list )
{
total += i;
}
return total;
}
Da bi se ovakva metoda primenila na izračunavanje zbira svih članova nekog celobrojnog niza, takav niz se mora deklarisati i inicijalizovati, zatim se kreira objekat klase koja sadrži metodu sum.
int[] testNiz = {1, 3, 4, 5, 5, 6};
int suma = p.sum(testNiz);
Metodi sum objekta p-te klase se kao parametar prosleđuje ime kreiranog niza. Rezultat izvršavanja metode se smešta u lokalnu promenljivu suma.
Ukoliko ne želimo da najpre deklarišemo i inicijalizujemo niz čiji zbir članova želimo, već da jednostavno članove niza prosledimo kao paremetre metodi koristi se ključna reč params. Prikazana je deklaracija metode koristeći ključnu reč params kao i kasnije pozivanje te metode.
public int Sum(params int[] list)
{
int total = 0;
foreach ( int i in list )
{
total += i;
}
return total;
}
...
// pe je objekat koji ima metodu sum()
...
// f-ja sum ima promenljivi broj parametara
int vrednost = pe.sum( 1, 3, 5, 7, 9, 11 );
Kada klasa sadrži niz korisno je pristupati podacima klase kao da je sama klasa niz. Indekser je property koji omogućava da se objekat indeksira na isti način kao niz, odnosno objekat klase se tretira kao niz. Klasa IndexerClass kao atribut sadrži celobrojni niz pod nazivom mojNiz. Ovaj niz se instancira unutar konstruktora klase. Sada želimo da instanciramo klasu ali tako da se kreirani objekat ponaša kao niz. U tu svrhu se koristi indekser. Indekser se deklariše koristeći ključnu reč this. U nastavku je prikazano deklarisanje i definisanje indeksera. Kao što je poznato get property se koristi za čitanja članova niza a set za setovanje članova niza.
public class IndexerClass
{
private int[ ] mojNiz ;
public IndexerClass()
{
mojNiz = new int[100];
}public int this [int index] // deklaracija Indexer -a
{
get
{
return mojNiz[index];
}
set
{
mojNiz[index] = value ;
}
}
}
Upotreba indeksera
Kada je u klasi definisan indekser onda se objekti klase tretiraju kao nizovi pa im se tako i pristupa. Ovo je ilistrovano ovde.
IndexerClass objekat = new IndexerClass();
objekat[3] = 2;
objekat[5] = 4;