Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# - Wczytywanie klasy z pliku

michal2409 26 Maj 2014 15:04 1641 17
  • #1 26 Maj 2014 15:04
    michal2409
    Poziom 12  

    Witam!

    Od kilku godzin głowię się jak wczytać z pliku *.cs jakąś klasę, tak aby w aplikacji nie była ona zwykłym tekstem a klasą jak inne.

    Dokładnie chodzi mi o mechanizm refleksji. Potrzebuje tej klasy żeby sobie z niej różne rzeczy powyciągać.

    Dla jasności, nie może to być obiekt klasy, bo chce jej użyć w następujący sposób:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0 17
  • #2 26 Maj 2014 15:13
    marcinj12
    Poziom 40  

    Kompilujesz plik z klasą jako bibliotekę DLL, bibliotekę dołączasz przez referencję do projektu i wtedy możesz używać tej klasy - nie wiem czy o to chodzi?

    0
  • #3 26 Maj 2014 16:14
    michal2409
    Poziom 12  

    Właśnie nie, bo potrzebuje tego do obliczania metryk, więc to musi być dla każdej klasy, z byle jakiego projektu.

    Dodano po 56 [minuty]:

    Nie rozumiem?

    0
  • #4 26 Maj 2014 16:15
    gaskoin
    Poziom 38  

    Ja nie kumam o co chodzi. Twój "przykład użycia" nic nie mówi.

    Chcesz mieć informację o metodach polach itd czy o czym z danego typu ? Type ma metody typu "GetMethods", "GetFields" etc

    0
  • #5 26 Maj 2014 16:21
    michal2409
    Poziom 12  

    Tak, o metodach np.
    A to było po prostu pokazanie w jakim kontekście chce załadować klasę z pliku. Bez ładowania z pliku tylko z jakiejś klasy z projektu wygląda to tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #6 26 Maj 2014 16:34
    gaskoin
    Poziom 38  

    W skrócie - chcesz wczytać dowolny plik tekstowy jako klasę ?

    0
  • #7 26 Maj 2014 16:42
    michal2409
    Poziom 12  

    Dokładnie tak

    0
  • #8 26 Maj 2014 18:23
    the_fifth_horseman
    Poziom 32  

    Tak się nie da. C# to nie jest język skryptowy.

    0
  • #9 26 Maj 2014 18:48
    michal2409
    Poziom 12  

    Jak się nie da? To jest napisane w C# i działa.

    Po za tym gdzieś w internecie coś takiego widziałem ale już nie pamiętam gdzie i nie mogę tego znaleźć.

    0
  • #10 26 Maj 2014 20:56
    michal2409
    Poziom 12  

    Wpadłem na pomysł, żeby zrobić tak, że kompiluje sobie plik *.cs do *.dll, otwieram sobie go i później to już z górki raczej ;)

    Teraz mam problem z kompilacją. W wierszu poleceń normalnie działa to co mam w kodzie, a tu nie i nie wiem czemu. Tu jest zrobione na sztywno, oczywiście klasa Test1.cs jest w folderze Debug, tam gdzie sie to kompiluje.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #11 26 Maj 2014 21:40
    marcinj12
    Poziom 40  

    Dlaczego nie potraktujesz pliku .cs jak zwykłego pliku tekstowego, który możesz przeszukiwać pod względem interesujących słów kluczowych wyrażeniem regularnym lub analizując każdą linię osobno?
    Kompilowanie klasy można teoretycznie zrobić w locie, ale przydatność tego żadna, bo rzadko kiedy będziesz miał do skompilowania jeden plik, prędzej kilkanaście/dziesiąt plików plus zależności zewnętrzne - to niemal na pewno zaowocuje błędem kompilacji.

    0
  • #12 26 Maj 2014 21:46
    michal2409
    Poziom 12  

    Bo to mija się z celem, np. przy zliczaniu metod publicznych i niepublicznych, jak ja rozróżnię np:
    private int dodaj() od public int dodaj = 15?
    To jest tylko projekt studencki, więc nie musi działać idealnie, ale muszę zaliczyć.

    0
  • #13 26 Maj 2014 22:16
    gaskoin
    Poziom 38  

    Zerknij jak np zrobili to w innych otwartych IDE. IntelliJ ma otwarte źródła, można podejrzeć jak indeksują oni klasy.

    0
  • #14 26 Maj 2014 22:26
    michal2409
    Poziom 12  

    Doszedłem do wniosku, że muszę wrócić do tej kompilacji z kodu, a ładowanie bd wyglądało tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #15 26 Maj 2014 23:06
    the_fifth_horseman
    Poziom 32  

    michal2409 napisał:
    Bo to mija się z celem, np. przy zliczaniu metod publicznych i niepublicznych, jak ja rozróżnię np:
    private int dodaj() od public int dodaj = 15?
    To jest tylko projekt studencki, więc nie musi działać idealnie, ale muszę zaliczyć.
    Wyrażenia regularne.

    0
  • #18 27 Sie 2014 20:07
    michal2409
    Poziom 12  

    Nadal to nie jest to o co mi chodzi.

    Próbuje zrobić coś takiego.
    Otwieram klase *.cs i kompiluje do *.dll ją za pomocą niżej pokazanych metod, następnie robie dla skompilowanej klasy obiekt klasy Type i z tego próbuje poprzez refleksje ciągnąć interesujące mnie dane, ale źle mi wczytuje te klasy i nie mam tych danych które rzeczywiście są w klasie.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0