| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > использование private методов из другого класса... |
| Автор: newsTester 9.7.2008, 18:15 |
| Только прошу без гнилых яблок и т.п.... Раньше писала на Java и была уверена что private метод на то и private что из других классов не виден. Теперь пришлось переходить на C# и, по идее, надо создать код обращающийся к private методам другого класса. При этом все лежит в одном Solution (кстати как это по русски будет?) и весь кодя я в принципе вижу, но менять мне его низзя. Может это важно... класс нарушающий общее правило пространства видимости не простой, а NUnit_овский. |
| Автор: Freak_FB 9.7.2008, 18:24 |
| Приватные поля на то и придуманы, чтобы их никто посторонний не изменял. Должны быть предусмотрены методы или свойства, меняющие эти поля. Не иначе. |
| Автор: newsTester 9.7.2008, 18:34 | ||
Так я и думала |
| Автор: PashaPash 9.7.2008, 18:52 | ||
newsTester,
|
| Автор: newsTester 9.7.2008, 19:01 |
| PashaPash. Видимо это и имелось ввиду |
| Автор: PashaPash 9.7.2008, 19:06 |
| newsTester, можно, но нельзя. |
| Автор: newsTester 9.7.2008, 19:12 | ||
по подробне бы, я ж не только в С# плаваю, но и в чтении чужих мыслей тоже... |
| Автор: Partizan 9.7.2008, 19:15 |
| newsTester, аналогично через Reflection дёргаете тип класса, а затем создаёте экземпляр с помощью Activator.CreateInstance |
| Автор: nikitao 9.7.2008, 20:01 |
| newsTester, вы уверены , что все так , как вы думаете ? По-русски - это солюшен , а по старо-русски - Решение. |
| Автор: newsTester 9.7.2008, 20:14 | ||
Вы на 100% правы, но моя задача не использовать класс, а протестировать его работу. В том числе и работу приватной части. Ну и вот... поля и правда трогать может и не надо, а вот методы прийдется (. Так что все из-за того что у меня задача специфическая. |
| Автор: newsTester 10.7.2008, 11:28 | ||||||
всеравно не понятно...
в случае с полями уже был конкретный экземпляр класса и мы его анализировали, а если класс приватный то уже на этапе создания экземпляра класса надо применять Reflection, но как? |
| Автор: Partizan 10.7.2008, 14:52 |
| newsTester, можете по имени сборки загрузить её экземпляр с помощью Assembly.Load а затем вызвать Assembly.GetTypes()... после этого для нужного типа вызываете Activator.CreateInstance(); |
| Автор: newsTester 2.8.2008, 00:18 |
| c private полями разобралась, со свойствами разобралась, с классами разобралвсь, а вот с методами - никак ( вот не вижу я как запустить метод и усе... По идее должно быть как и со свойствами... но вот как? |
| Автор: Partizan 2.8.2008, 00:47 | ||
|
| Автор: jonie 3.8.2008, 01:38 |
| если имеете доступ к исходным кодам, тогда сделайте класс partial, допишите какой вам нужно код и тестируйте. например : делаете свой солюшен, куда добавляете весь исходный солюшен, и еще один файл, содержащий в себе методы доступа к классу и его тестирования. думаю добавить одно слово к объявлению класса удобнее, нежели плясать с рефлексией .... |
| Автор: newsTester 6.11.2008, 02:55 | ||||
|
| Автор: jonie 7.11.2008, 10:45 |
| http://msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx там про partial почитайте. |
| Автор: Wizard_Memfis 7.11.2008, 11:11 | ||
| Как я понимаю это необходимо для NUnit тестирования. Делайте так:
Так можно достать не только метод или поля, но и приватный класс находящийся внутри класса и базовый. Вобщем все что нужно!Но вот в программе пользоваться не рекомендую, так как сама по себе рефлексия очень медленная! |
| Автор: Partizan 7.11.2008, 12:03 | ||
+ прога, использующая reflection вряд ли успешно будет работать после обфускации =) |