[C#]Informacje o klasie dostępne dla metod p.nazw Reflection

0

Witam,

piszę aplikację, która analizuje plik .dll i na na podstawie informacji tam zawartych wykonuje jakieś czynności.

Każdy plik dll, który będę wczytywał będzie zawierał klasy konkretnej budowy.
Muszę dodać do każdej klasy kilka informacji o niej.
Informacje te będę zczytywał metodami klas assembly, type i methodInfo.

Pytanie w jaki sposób "opisać" te klasy w kliku dll potrzebnymi informacjami.
będą to informacje typu key/value.np:

Jak mogę takie coś zrealizować?
Czy można się posłużyć atrybutami, jeśli tak, to jak?
A może statyczne pola ale one chyba nie mają wartości, jeśli nie został stworzony żaden obiekt tej klasy.

0

pola statyczne nie wymagaja aby utworzenia instancji klasy, ale nie zapewniaja wg takiej elastycznosci jak atrybuty lub implementacja interfejsu

atrybuty:
implemetujesz klase dziedziczaca po Attribute, ktora bedzie miala kolekcje klucz-wartosc, lub kazdy taki atrybut bedzie zawieral klucz i wartosc i dopuscisz mozliwosc dodawia wielu takich atrybutow, np.

[MojAtrybut("klucz1", "wartosc1")]
[MojAtrybut("klucz2", "wartosc2")]
[MojAtrybut("klucz3", "wartosc3")]
[MojAtrybut("klucz4", "wartosc4")]
[MojAtrybut("klucz5", "wartosc5")]
class MojaKlasa {}

wada tego rozwiazania jest to ze klucze moga sie powtarzac

[MojAtrybut(new [] {{"k1", "v1"}, {"k2", "v2"}, {"k3", "v3}})]
class MojaKlasa {}

interfejs:
wada jest to ze wymaga instancji klasy

pola statyczne:
troche mniej estetyczne rozwiazanie z punktu widzenia projektowania, poza tym wiecej zabawy z refleksja, bo nie mozesz bazowac tylko na nazwie pola, ale tez na jego typie, a moge w ogole na typie, wiec troche bardziej skomplikowane

wydaje sie ze atrybuty beda dobrym dla ciebie wyborem
jesli ewentualnie dokladniej opiszesz problem, bedziemy mogli podac wiecej szczegolow

0

Lista czynności, które będą wykonywane przez moją aplikację będzie do rozbudowy "podgrywając i rejestrując" nowe biblioteki dll w aplikacji. Niestety potrzebuje kilku informacji o klasach zawartych w bibliotekach dll. M.in, settingsId, i inne wartości na zasadzie key/value system.
Będę również potrzebował pewnych informacji o klasie na zasadzie kolekcji kilkunastu stringów. Więc zależy mi aby zrealizować te dwie kwestie.

Co do pierwszego problemu sądzę że atrybuty key/value są dobrym rozwiązaniem. Co do drugiego, jeszcze nie wiem.

1

wada tego rozwiazania jest to ze klucze moga sie powtarzac

http://msdn.microsoft.com/en-us/library/tw5zxet9%28v=VS.71%29.aspx

0

MSM a co to ma do tego ze jak atrybuty sie powtarzaja, to nie mozesz zapewnic niepowtarzalnosci klucza, bo kazdy atrybut, to instancja klasy, ktora ma jakies pola

oczywiscie AttributeUsage jest potrzebne do okreslenia, gdzie dany atrybut moze byc stosowany, czy moze byc wielokrotnie uzyty i czy klasa dziedziczaca, dziedziczy tez atrybuty z bazowej
ale i tak nie pomaga w rozwiazaniu tej kwestii

wg mnie raczej kod uzywajacy tych atrybutow, powinien byc gotowy na taka sytuacje i robic sobie jakis "distinct" takich wartosci

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