Metoda statyczna działająca tylko dla obiektów klasy z atrybutem

0

Dzień dobry,
A więc muszę napisać prosty program w którym mam napisany swój jakiś atrybut, DekorujAttribute i klasę, załóżmy Pracownik. DekorujAttribute jest tylko dla klas i klasa Pracownik wykorzystuje ten atrybut.
Teraz w klasie Program (tej domyślnej) piszę metodę statyczną Wyświetl(object o) i ma ona zwracać to co zwraca w klasie Pracownik metoda ToString tylko że w nawiasach (takie udekorowanie).
Problem mój polega na tym że nie rozumiem do końca atrybutów, (ostatnie 4 godziny spędziłem szukając jakieś pomocy na ten temat i niczego nie znalazłem co by mi to jasno jakoś tłumaczyło jak to zaimplementować) a sedno tkwi w tym iż ta metoda Wyświetl ma działać/wyświetlać to udekorowanie tylko dla obiektów klasy z atrybutem DekorujAttribute. Poniżej wstawiam kod.

    [AttributeUsage(AttributeTargets.Class , AllowMultiple = true)]
    public class DekorujAttribute : Attribute
    {
        bool b;
        public DekorujAttribute(bool bb)
        {
            this.b = bb;
        }
    }
    [DekorujAttribute(true)]
    class Pracownik
    {
        string imię;
        string nazwisko;
        int staż_pracy;
        public Pracownik(string i, string n, int s)
        {
            this.imię = i;
            this.nazwisko = n;
            this.staż_pracy = s;
        }
        public override string ToString()
        {
            return imię.ToString() + " " + nazwisko.ToString() + " Staż pracy: " + staż_pracy.ToString();
        }
    }
    class Programista : Pracownik
    {
        string specjalizacja;
        public Programista(string i, string n, int s, string spec) : base(i, n, s)
        {
            this.specjalizacja = spec;
        }
    }
    class Student
    {
        string imię;
        string nazwisko;
        int staż_pracy;
        public Student(string i, string n, int s)
        {
            this.imię = i;
            this.nazwisko = n;
            this.staż_pracy = s;
        }
        public override string ToString()
        {
            return imię.ToString() + " " + nazwisko.ToString() + " Staż pracy: " + staż_pracy.ToString();
        }
    }
    class Program
    {
        public static string Wyświetl(object o)
        {
            return "'"+o.ToString()+"'";
        }
        static void Main(string[] args)
        {
            Pracownik p = new Pracownik("aaa", "aaa", 10);
            Student s = new Student("bbb", "bbb", 15);
            //tu spoko ma działać i działa : 
            Console.WriteLine(Wyświetl(p));
            //dla studenta ma nie działać ale działa:
            Console.WriteLine(Wyświetl(s));
            Console.ReadKey();
        }
    }
}

Nazwy są takie jakie są ponieważ jest to rzeczywiście jedna z rzeczy w projekcie na zaliczenie, a jest to sprawdzane programem i muszą być identyczne z tym co nam podadzą :x

0

Wiedza której Ci brakuje, to ta odnośnie jak odczytywać atrybuty, tutaj masz ładny przykład:

https://msdn.microsoft.com/en-us/library/z919e8tw(v=vs.100).aspx

i właściwie tam jest przykład który robi dokładnie to co chcesz osiągnąć, czyli wypisuje coś tylko dla udekorowanych klas ;)

0
neves napisał(a):

Wiedza której Ci brakuje, to ta odnośnie jak odczytywać atrybuty, tutaj masz ładny przykład:

https://msdn.microsoft.com/en-us/library/z919e8tw(v=vs.100).aspx

i właściwie tam jest przykład który robi dokładnie to co chcesz osiągnąć, czyli wypisuje coś tylko dla udekorowanych klas ;)

Tak, już mniej więcej łapie. Udało mi się zrobić tą metodę Wyświetl i działa ona. Dziękuje za pomoc, ten jeden przykład więcej wytłumaczył z tymi atrybutami niż wszystkie strony jakie przejrzałem w języku polskim, i rzeczywiście mój problem polegał głównie na tym jak czytać te atrybuty :)
Dziękuje bardzo za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1