Indexed properties

Rad bi naredil property, ki bi vračol en zapis glede na string paramtere, ki bi ga dobil v c#.

Primer: 

Table.FieldByName["sifra"].AsString = "blabl";
string  s = Table.FieldByName["sifra"].AsString;

 

Torej če bi dosegel da bi FieldByName vračol nek object, ki bi imel implementiran AsString property, potem bi tole šlo.
Vprašanje je, kako prepričati property, da bo prebrol en zapis iz: List ali array ali nekaj tretjega.

Vse kar sem do sedaj ugotovil je da bo nekaj v tem stilu:

public TMojObjekt this[int index]
{
}

Vendar jest bi rabil za parameter podati string (zgornji primer - FieldByName["sifra"]).
Kaj pomeni this? Na koga se navezuje?

 

Avtor: fora, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

fora
fora - petek, 19. januar 2007

Hvala. Vse dela kot sem hotel.Lahko daš tudi public Person this[string PersonName]Greš čez celo listo in najdeš osebo s takim imenom in to vrneš.

bojanv
bojanv - četrtek, 18. januar 2007

this je rezervirana beseda, ki se navezuje na trenutno instanco razreda. This se uporablja v več načinih. Ena, kot this.variable, ki se nanaša direktno na spremenljivko (recimo, če prirejamo spremenljivko, lahko uporabimo ista imena -- glej primer spodaj), lahko ga uporabimo za klic v konstruktorju in na koncu ga lahko uporabimo še kot indekser. To pomeni, da omogočimo svojemu razredu, da se obnaša kot polje (tako kot je property pametna spremenljivka), inicilizira se pa kot property. V oglate oklepaje napišemo pogoj, potem pa lahko omogočimo samo branje ali pisanje.Primer: public class PersonList    {        private SortedList<int, Person> list;        public PersonList() { list = new SortedList<int, Person>(); }        public void AddPerson(Person person); //implementiraj dodajanje osebe        public Person this[int key]         {            get             {                if (list.ContainsKey(key))                    return list[key];                else throw new ArgumentOutOfRangeException("Napačen parameter!");                             }        }    }    public class Person    {        private int age;        public int ID;            public string Name;        public Person() : this(-1, "", 0) { } //se nanašamo na konstruktor tega razreda        public Person(int id, string name, int age)         {            this.age = age; //se nastavi direktno na naslov spremenljivke age            Name = name; //se inicializira novo vrednost, torej nov naslov            ID = id;        }        public int Age { get { age; } }            }Klic bi potekal takole:PersonList list = new PersonList(); list.AddPerson(new Person(1,"Bojan",24));Console.WriteLine(list[1].Name);Kot pogoj lahko daš karkoli želiš. Npr. lahko bi iskal po priimku.....Z drugo besedo, če bo imel tvoj objekt AsString metodo (objekt, ki ga vračas v index-erju), potem lahko uporabiš indekser za vračanje objekta na podlagi določenega iskalnega kriterija. Lahko ali vračaš ali nastavljaš ali pa oboje. Zelo koristna stvar, če mene vprašaš. Izkoristi!!!