Ustawianie wartości propertisa przez atrybut

0

Witam, mimo, że to banał to nigdy tego nie miałem okazji zrobić i nie moge nigdzie znaleźć odpowiedniego tuta. Chce aby ustawić wartość stringa, który jest nullem, ewentualnie zmienić jego wartość.


    [AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
    public class UserFriendlyDateTime : Attribute
    {
        public string DateTime { get; set; }

        public UserFriendlyDateTime()
        {
           // Jak dostać się do UstawCzas ?
        }
    }


public class Foo
{
     [UserFriendlyDateTime]
     public string UstawCzas {get; set;}
}

2

A nie proscie to zrobic w kodzie, ktory korzysta z tej klasy? W atttrybucie tego raczej nie zrobisz.

4

Atrybuty nie działają na zasadzie czarów. Musisz napisać kod, który weźmie ten obiekt, sprawdzi, że jego właściwość jest udekorowana danym atrybutem i zrobi co tylko zechcesz. Sam atrybut to za mało.

0

Mam wiele miejsc, które korzystają z tego propertisa, stąd nie chciałem w kółko tworzyć obiektu. Widać nie ma wyjścia, myślałem że po prostu jest taka możliwość, ale nigdy się z nią nie spotkałem. Dzięki za odpowiedzi.

0

Co konkretnie chcesz zrobić? Jeśli chcesz zrobić to raz na samym początku to powinno dać radę w ten sposób. Podona ilość roboty co dodanie atrybutu, i nie trzeba bawić się w dziwne interfejsy.

        static string InitTime()
        {
            return "Now: " + DateTime.Now;
        }
        class MyClass
        {
            public string Time { get; set; } = StaticClass.InitTime();
        }

Ed. doczytałem

Naj lepiej zrobisz, jak napiszesz klase i w niej będziesz ustawiał naraz, string i datetime, łatwo trzymać to pod kontrolą i a używając dostawiasz proste propertisy.

0

Mowa o tym konkretnym jedynym jedynym propertisie?
To przecież możesz po prostu dać pole wewnętrzne, a jeśli jest nieustawione, to zwracać z property jakąś domyślną wartość. Zmiana będzie w jednym miejscu, i nie trzeba żadnych atrybutów.

0
_flamingAccount napisał(a):

Co konkretnie chcesz zrobić? Jeśli chcesz zrobić to raz na samym początku to powinno dać radę w ten sposób. Podona ilość roboty co dodanie atrybutu, i nie trzeba bawić się w dziwne interfejsy.

        static string InitTime()
        {
            return "Now: " + DateTime.Now;
        }
        class MyClass
        {
            public string Time { get; set; } = StatticClass.InitTime();
        }

Ed. doczytałem

Naj lepiej zrobisz, jak napiszesz klase i w niej będziesz ustawiał naraz, string i datetime, łatwo trzymać to pod kontrolą i a używając dostawiasz proste propertisy.

Właśnie tak zrobiłem. Niepotrzebnie kombinowałem, bo chciałem to zrobić w inny sposób.

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