Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2015, 11:59   #1
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию Работа с cs.файлом

Как реализовать метод (принимающий в качестве параметра имя класса), который записывает все члены класса в файл *.cs, и должен ещё компилироваться?
Использовать механизм рефлексии

Код:
namespace LabWork1_2
{
    public interface IFaceOne
    {
        void MethodA();
        int MethodB();
    }
    public interface IFaceTwo
    {
        void MethodC();
        void MethodD();
    }
    public class MyClass : IFaceOne, IFaceTwo
    {
        public static int field1;
        public int field2;
        public string strfld1;

        public MyClass()
        {
            field1=0;
            field2 = 0;
            strfld1 = "";
        }
        public MyClass(int fld1,int fld2,string strf1)
        {
            field1 = fld1;
            field2 = fld2;
            strfld1 = strf1;
        }
        public int MyProperties
    {
        get { return field1; }
        set { field1 = value; }
        }
        public int MyProperties1
        {
get { return field2; }
        set { field2 = value; }
    }
        void MethodA(string _str)
    {
            _str = "Rostov-Na-Donu";
    }
        int MethodB()
        {
           return field1 + field2;
        }
        public string MethodC(string _str)
        {
strfld1=_str;
return strfld1;
        }
        void MethodD()
        {
            Console.WriteLine("Статическое поле{0}",field1);
            Console.WriteLine("Нестатическое поле{0}",field2);
            Console.WriteLine("Строка{0}",strfld1);
        }      
    }
}
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
using System.Threading.Tasks;

namespace LabWork1_2
{
    class MyTestClass
    {
        public void writetofile(MyClass m) 
        {
            StreamWriter wrt = new StreamWriter("ProgLog.txt");
            Type t = m.GetType();
            wrt.Write("using system;/namespace LabWork1_2 {0}\n",t.Namespace);
            wrt.Write("{");
            wrt.WriteLine("Методы класса");
            MethodInfo[] mi = t.GetMethods();
            foreach (MethodInfo mt in mi)
                Console.WriteLine("Методы{0}", mt.Name);
            wrt.WriteLine("–––––––––––––––––––––\n*");
            wrt.WriteLine("Поля класса");
            FieldInfo[] fi = t.GetFields();
            foreach (FieldInfo fld in fi)
                wrt.WriteLine("Поля:{0}", fld.Name);
            wrt.WriteLine("–––––––––––––––––––––\n");
            wrt.WriteLine("Информация о классе");
            wrt.WriteLine("Базовый?:{0}", t.BaseType);
            wrt.WriteLine("Абстрактный:{0}", t.IsAbstract);
            wrt.WriteLine("ComObject?", t.IsCOMObject);
            wrt.WriteLine("Защищённый клас:{0}", t.IsSealed);
            wrt.WriteLine("Простой класс?:{0}", t.IsClass);
            wrt.WriteLine("–––––––––––––––––––––––––––\n");
            wrt.WriteLine("Свойство класса");
            PropertyInfo[] pi = t.GetProperties();
            foreach (PropertyInfo prop in pi)
                wrt.WriteLine("Свойства{0}", prop.Name);
            wrt.WriteLine("–––––––––––––––––––––––––––\n");
            wrt.WriteLine("Интерфейсы класса");
            Type[] ifaces = t.GetInterfaces();
            foreach (Type i in ifaces)
                wrt.WriteLine("Интерфейс:{0}", i.Name);
            wrt.WriteLine("–––––––––––––––––––––––––––\n");
            wrt.Write("}\n}");
            wrt.Close();
    }
        public  void writecsfile(MyClass m)
        {
            StreamWriter wrt = new StreamWriter("ProgLog.cs");
            Console.WriteLine("Методы класса");
            Type t = m.GetType();
            MethodInfo[] mi = t.GetMethods();
            foreach (MethodInfo mt in mi)
                Console.WriteLine("Методы{0}", mt.Name);
            Console.WriteLine("–––––––––––––––––––––\n*");
            Console.WriteLine("Поля класса");
            FieldInfo[] fi = t.GetFields();
            foreach (FieldInfo fld in fi)
                wrt.WriteLine(fld.Name);
            wrt.Write(t.BaseType);
          wrt.WriteLine(t.IsAbstract);
            wrt.WriteLine(t.IsCOMObject);
           wrt.WriteLine(t.IsSealed);
            wrt.WriteLine(t.IsClass);
            PropertyInfo[] pi = t.GetProperties();
            foreach (PropertyInfo prop in pi)
                wrt.WriteLine( prop.Name);
            Type[] ifaces = t.GetInterfaces();
            foreach (Type i in ifaces)
               wrt.WriteLine(i.Name);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Type m = typeof(MyClass);
            MyTestClass mtc = new MyTestClass();
            mtc.writetofile(typeof(MyClass));
            mtc.writecsfile(typeof(MyClass));
            Console.ReadKey();
        }
    }
}
Otar4ik вне форума Ответить с цитированием
Старый 18.09.2015, 12:39   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это вы свой Reflector/DotPeek/ILSpy пытаетесь создать что ли?

Рефлексия ж никак не вернет вам исходный код методов, только некоторую инфу о них.

http://habrahabr.ru/company/luxoft/blog/244095/
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.09.2015, 00:22   #3
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
namespace LabWork1_2
Alex11223, насчет создания рефлектора вы явно погорячились)
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 19.09.2015, 00:34   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну понятно, что лаба
но написано ж
Цитата:
и должен ещё компилироваться
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.09.2015, 07:09   #5
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Если не ошибаюсь, вам поможет
https://channel9.msdn.com/Events/Dev...2015/BlueD2S05
Akeloya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлом Си Kr@ShAK Общие вопросы C/C++ 4 20.12.2013 15:58
Работа с файлом C++ (VS) messiman Помощь студентам 2 23.09.2013 17:34
Работа с PE-файлом Sparky Помощь студентам 2 19.10.2012 17:37
Работа С Файлом Sneidi Общие вопросы C/C++ 1 09.06.2012 00:46
[C++] Работа с файлом AquaticSoul Общие вопросы C/C++ 3 29.04.2010 12:10