4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
1

Можно ли как-то получить из одного класса исходный код другого класса?

04.09.2014, 18:30. Показов 1752. Ответов 3
Метки нет (Все метки)

Предположим есть два публичных класса. Один находится в одной части проекта, другой где-нибудь в другой части проекта. Мне для своих каких-то целей из второго класса нужно получить весь исходный код первого класса. Не свойство или метод, а прям исходный код. Есть ли в шарпе какая-нибудь стандартная функция, которая бы мне вернула его исходный код в виде строки или строкового массива? В JavaScript такая была, иногда выручала прям. Может как-то иначе можно добиться этого же результата?
Про обычное чтение cs-файла, в котором расположен данный класс можете не говорить. Я про это знаю, но это на крайний случай! Хотелось бы более изящным способом решить.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2014, 18:30
Ответы с готовыми решениями:

Каким образом можно из метода одного класса, вывести в метод другого класса текст всплывающего сообщения
Доброе время суток! Есть метод отрисовки всплывающего сообщения public void SetBalloonTip()...

Как в случае с Dependency Injection внедрять отдельный экземпляр некоторого класса только лишь для одного другого класса
Здравствуйте, пытаюсь понять как же всё таки правильно использовать Dependency Injection в случае c...

Html Agility Pack. Как получить код только одного класса?
как я уже понял, что лучше всего будет использовать html agility pack, но пока не понимаю как...

С помощью делегата из одного класса вызвать private метод с другого класса
доброго времени суток. такой вопрос. С применением делегатов и пониманием проблем нет когда...

3
1056 / 863 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
04.09.2014, 18:40 2
а для каких целей вам необходим исходный код? может, в этом и нет необходимости?

Как вариант можно хранить в программе строку-код класса, а компилировать его динамически.
вот пример, где строка ClassBody содержит класс MyClass и вызывается его статический метод Create.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var sources = ClassBody;
var provider = new CSharpCodeProvider();
var parameters = new CompilerParameters { GenerateInMemory = true };
parameters.ReferencedAssemblies.Add("System.dll");
CompilerResults results = provider.CompileAssemblyFromSource(parameters, sources);
if (results.Errors.Count > 0)
{
    string errors = string.Join(Environment.NewLine,
             results.Errors.Cast<CompilerError>().Select(x => x.ErrorText));
    throw new ArgumentException(errors, "input");
}
var cls = results.CompiledAssembly.GetType("MyClass");
var method = cls.GetMethod("Create", BindingFlags.Static | BindingFlags.Public);
 
return method.Invoke(null, null);
0
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
04.09.2014, 19:29  [ТС] 3
Цитата Сообщение от Learx Посмотреть сообщение
а для каких целей вам необходим исходный код? может, в этом и нет необходимости?
В одном из классов в проекте прописаны те бизнес-объекты, для которых этот класс что-то делает. Мне нужен исходник всего класса как раз для того, чтобы создать список этих бизнес-объектов. Они перечисляются примерно так:
if ((текущий_объект == "имя_бизнес_объекта1") || (текущий_объект == "имя_бизнес_объекта4") ||
(текущий_объект == "имя_бизнес_объекта37") || ...)
И такие if'ы могут быть в нескольких методах.
Вот я и хочу получить исходник всего класса, а потом повыдирать с него имена этих самых бизнес-объектов. Писал тот класс, где все это хранится, другой человек, он сейчас в отпуске. Поэтому изменять его класс для каких-то своих нужд не стоит. Соответственно и ваш метод не подойдет.
0
1056 / 863 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
08.09.2014, 16:48 4
SLiTHER, тут архитектурная ошибка. по уму следует создать класс-контейнер для бизнес-объектов. обозначить для объектов группы, или что-то вроде того. и вместо того чтоб делать такие if-ы как у вас просто делаем проверку группы текущего объекта.


а делать говнокод из-за того, что человек в отпуске нет смысла - это как снежный ком. чем дальше- тем больше г.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2014, 16:48
Помогаю со студенческими работами здесь

Изменить пола одного класса методами другого класса так, чтобы изменения сохранились в первом классе
Есть простая форма с текстбоксом и тремя кнопками. Нужно следующее: Нажимаем на кнопку 1,...

Вызов функций одного класса из другого класса
В начале был класс public class Matrix { public double matrix; public...

Получить доступ с одного класса к элементу второго класса
Добрый вечер, я сейчас работаю с XNA Game Studio 4.0, каркас программы аналогичен .Net , пишу свою...

Как получить переменную из другого класса?
У меня в неком классе возникает событие и я хочу при возникновении этого события присвоить значение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru