Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 1.729 pregleda

Najnovija ↓

Atributi parametara - provera imena property-ja 29.07.2010. u 11:31 · pre 197 meseci #1
Pravim neku metodu koja prima nekoliko stringova čije vrednosti bi trebalo da budu imena property-ja klase. Da li postoji neki atribut koji proverava da li su ta imena validna, tj. da li property-ji sa takvim imenom postoje?

Npr:
Code:

public class Osoba
{
    public string Ime { get; set; }
    public string Prezime { get; set; }
}

public class NekaKlasa
{
    private static void NekaMetoda(Osoba obj, string propertyName)
    {
        if (obj.GetType().GetProperty(propertyName).GetValue(obj, null) != null)
        {
            //do something
            //...
        }
    }
}


I sad ako pozovem NekaKlasa.NekaMetoda(obj, "Ime") to bi trebalo da prođe, a ako pozovem NekaKlasa.NekaMetoda(obj, "NepostojeciProperty") da dobijem compile time error.
Re: Atributi parametara - provera imena property-ja 29.07.2010. u 14:18 · pre 197 meseci #2
Postoje neki atributi koji rade u compile time-u (npr. Obsolete, UsageAttribute, Extension, itd.), ali su svi unapred definisani u kompajleru. Atributi koje ti kao developer pises se kompajliraju u assembly i koriste iskljucivo u run time-u. Uostalom nisam siguran ni kako bi taj sistem radio, sta je sa calculated stringovima, npr. NekaKlasa.NekaMetoda(obj, "Ime" + con.ReadLine())?

Ukratko, compile time gresku neces nikada dobiti na taj nacin, nema tih atributa koji to rade.
Umesto toga koristi named string constants sto ce drasticno olaksati posao i smanjiti mogucnost runtime greske, npr.

Code:

public class Osoba
{
   public const string ImeProperty = "Ime";
   public const string PrezimeProperty = "Ime";
}

...

NekaKlasa.NekaMetoda(obj, Osoba.Ime);
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
Re: Atributi parametara - provera imena property-ja 30.07.2010. u 14:06 · pre 197 meseci #3
Hvala na odgovoru.

Primetio sam da je takvo (ili slično) ponašanje u nekim slučajevima implementirano. Recimo string.Format() me odmah upozorava ako se broj argumenata i parametara ne poklapa ili XML doc mi prijavljuje grešku ako nisam napisao dokumentaciju za sve parametre metode itd. Pa sam se nadao da je to urađeno uz pomoć atributa i da nešto slično već postoji za proveru imena svojstava.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme