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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2016, 02:51   #51
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Вопрос в другом. Я знаю, что у ассемблера не существует понятия "свойство", а значит шарповские свойства - это кастрированные функции - вот вам и переходы по стеку (вызов функции). Этого достаточно для того, что бы не вдаваться в детали кода.
откройте доку языка, и вы не поверите, но вы найдете там что свойства и есть пара методов.
а this, это вообще просто первый аргумент функции.
Цитата:
Сразу видно ваше отношение к понятию "программист". Меня учили системному программированию.
а ваше видно вообще, "увидел 3 call, и сделаю как я вывод."
в отличие от вас я способен проанализировать код.
вы даже не удосужились его посмотреть, как я говорил, у вас откуда-то вылез вызов из таблицы методов(а значит был вызов виртуальному методу, ToString? либо вы поймали JIT)
это уже интересно, что же вы анализировали-то?

вы бы лучше поставили бряк на запись в ячейку указателя массива, и посмотрели на срабатывание
а не смотреть на код без анализа и разбора.

я вам написал полный реальный код(отладочный правда, потому без оптимизаций), найдете там вызов set?
причем с сопоставлением каждой строчке исходника, отладчик студии шикарен

знаете, по вашим же словам, вы сделали следующее:
поймали в отладчике какой-то код связанный с переменной.
посмотрели количество call, вроде подходит...а вывалю-ка.(сами признали что не разбирали его)
и при этом хвастаете образованием? серьезно?))

бла-бла я сказал, к тому что все это не имеет отношение сейчас к делу.
у вас есть C#,IL,ASM. все.
чему там учили это не важно. важно что есть по факту.
Цитата:
Уже переходим на ты ? Нет, такого я себе не позволю.
вообще то это цитата.
из книги Песнь Льда и Пламени(и сериала Игра Престолов)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.09.2016 в 03:06.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2016, 03:08   #52
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я вам уже давно предлагал, если вы так уверены что есть вызов set в том выражении.
то поставьте точку останова в нем, и запустите отладку, и увидите, где идет вход в него(при отладке не будет инлайна, а значит бряк сработает всегда)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2016, 03:13   #53
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Пепел Феникса
Как я уже сказал - свойство = функция
А это означает: вызов свойства = вызов set.
Этим я и объяснил свой вывод и отсутствие анализа кода.

И нет никаких ToString
Код:
using System;

namespace TestProperties
{
	class Program
	{
		static void Main(string[] args)
		{
			PropertiesTest testing=new PropertiesTest();
			testing.Data[5]=testing.Data[6];
			Console.WriteLine();
		}
	}
	class PropertiesTest
	{
		public PropertiesTest()
		{
			data=new byte[10];
			for (int i=0;i<10;i++)
				data[i]=(byte)(i+1);
		}
		private byte[] data;
		public byte[] Data
		{
			set
			{
				data=value;
			}
			get
			{
				return data;
			}
		}
	}
}
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.09.2016, 03:15   #54
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Как я уже сказал - свойство = функция
А это означает: вызов свойства = вызов set.
Этим я и объяснил свой вывод и отсутствие анализа кода.
обратите внимание на код.
свойство, это две функции, а не одна.
так что вызов функции, это мог быть и get
ваш последний call, скорее всего Console.WriteLine.
вы бы в один метод их не ставили чтоли.
раз уж не собирались анализировать.

поздравляю, вы поймали JIT.(студия, в отличие от Cheat Engine, форсит JIT, при дизасме)

я ниже выложил листинг(он немного сложнее из-за того что у меня проц x64, если хотите выложу листинг вашего кода)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.09.2016 в 03:26.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2016, 03:26   #55
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Пепел Феникса
Мой скрин трассировки - только брейк поинт на запись в ячейку 5. Чтение из ячейки 6 я не трассировал (забыл).
И да, мой проц (ровно как и система) тоже x64. Так что это всего лишь вопрос эмуляции (сборка Any CPU = x32)
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 15.09.2016 в 03:29.
OmegaBerkut вне форума Ответить с цитированием
Старый 15.09.2016, 03:32   #56
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы вместо того чтоб пытаться гнуть свою точку зрения.
прочитаете хоть один аргумент или ответите хоть на один вопрос?
вот вам листинг вашего кода.
реальный листинг метода, а не трассировки(которые кстати всегда требуют анализа)
Код:
        {
04FF1758  push        ebp  
04FF1759  mov         ebp,esp  
04FF175B  push        edi  
04FF175C  push        esi  
04FF175D  push        ebx  
04FF175E  sub         esp,48h  
04FF1761  mov         esi,ecx  
04FF1763  lea         edi,[ebp-38h]  
04FF1766  mov         ecx,0Bh  
04FF176B  xor         eax,eax  
04FF176D  rep stos    dword ptr es:[edi]  
04FF176F  mov         ecx,esi  
04FF1771  xor         eax,eax  
04FF1773  mov         dword ptr [ebp-1Ch],eax  
04FF1776  mov         dword ptr [ebp-3Ch],ecx  
04FF1779  cmp         dword ptr ds:[7591BCh],0  
04FF1780  je          04FF1787  
04FF1782  call        79EF3651  
04FF1787  xor         edx,edx  
04FF1789  mov         dword ptr [ebp-40h],edx  
04FF178C  nop  
            PropertiesTest testing = new PropertiesTest();
04FF178D  mov         ecx,759E70h  
04FF1792  call        0074201C  
04FF1797  mov         dword ptr [ebp-44h],eax  
04FF179A  mov         ecx,dword ptr [ebp-44h]  
04FF179D  call        0075C548  
04FF17A2  mov         eax,dword ptr [ebp-44h]  
04FF17A5  mov         dword ptr [ebp-40h],eax  
            testing.Data[5] = testing.Data[6];
04FF17A8  mov         ecx,dword ptr [ebp-40h]  
04FF17AB  cmp         dword ptr [ecx],ecx  
04FF17AD  call        0075C558  
04FF17B2  mov         dword ptr [ebp-48h],eax  
04FF17B5  mov         dword ptr [ebp-4Ch],5  
04FF17BC  mov         ecx,dword ptr [ebp-40h]  
04FF17BF  cmp         dword ptr [ecx],ecx  
04FF17C1  call        0075C558  
04FF17C6  mov         dword ptr [ebp-50h],eax  
04FF17C9  mov         eax,dword ptr [ebp-50h]  
04FF17CC  cmp         dword ptr [eax+4],6  
04FF17D0  ja          04FF17D7  
04FF17D2  call        79EF528C  
04FF17D7  movzx       eax,byte ptr [eax+0Eh]  
04FF17DB  mov         dword ptr [ebp-54h],eax  
04FF17DE  mov         eax,dword ptr [ebp-4Ch]  
04FF17E1  mov         edx,dword ptr [ebp-48h]  
04FF17E4  cmp         eax,dword ptr [edx+4]  
04FF17E7  jb          04FF17EE  
04FF17E9  call        79EF528C  
04FF17EE  mov         ecx,dword ptr [ebp-54h]  
04FF17F1  mov         byte ptr [edx+eax+8],cl  
            Console.WriteLine();
04FF17F5  call        79584F60  
04FF17FA  nop  
        }
04FF17FB  nop  
04FF17FC  lea         esp,[ebp-0Ch]  
04FF17FF  pop         ebx  
04FF1800  pop         esi  
04FF1801  pop         edi  
04FF1802  pop         ebp  
04FF1803  ret
мне комментировать каждый call, как в посте 49?
или сами сможете?

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

+прочтите пост 52.
если все так как вы говорите, то вы остановитесь в бряке.
Цитата:
(сборка Any CPU = x32)
сборка Any CPU = целевому процессору, а не x86, для x86 есть явный профиль.
Цитата:
Мой скрин трассировки - только брейк поинт на запись в ячейку 5. Чтение из ячейки 6 я не трассировал (забыл).
я вам говорю, выкиньте ваш CE, он не такой мощный отладчик как студия.
и поставьте нормальный шарповый бряк внутрь set метода, и ждите срабатывания.


кстати тупой вопрос, трассировщик разве не должен был начать работу с обращений к переменной?
насколько помню(когда работал с CE) должен был. вы случаем не на стек поставили бряк? О_о

и еще один нюанс, который вы не учли пытаясь сделать анализ, если это трассировка записи, значит мы уже получили ссылку на массив, и тогда шаг 1,2 вы не могли увидеть.
что-то не сходится, вам не кажется?
(банально с точки зрения логики, молчу уж про остальное что я писал)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.09.2016 в 03:45.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2016, 03:51   #57
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
using System;

namespace TestProperties
{
	class Program
	{
		static void Main(string[] args)
		{
			PropertiesTest testing=new PropertiesTest();
			testing.Data[5]=testing.Data[6];
			Console.ReadLine();
		}
	}
	class PropertiesTest
	{
		public PropertiesTest()
		{
			data=new byte[10];
			for (int i=0;i<10;i++)
				data[i]=(byte)(i+1);
		}
		private byte[] data;
		public byte[] Data
		{
			set
			{      
                                Console.WriteLine("setter");
				data=value;
			}
			get
			{
                                Console.WriteLine("getter");
				return data;
			}
		}
	}
}
можно же еще проще.
тестируйте на здоровье.
и перестаньте фантазировать о неявных присвоениях.

надеюсь на этом вы закончите гнуть свою фантазию о языке.

извините, если грубовато, но я немного под-устал...
(а ваше упоминание об образовании, еще и разозлила немного)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.09.2016 в 03:53.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2016, 03:54   #58
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Вот так что ли ??
Изображения
Тип файла: jpg toSet.jpg (64.2 Кб, 158 просмотров)
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.09.2016, 03:55   #59
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

А ещё, я перед этим падаю в get
Изображения
Тип файла: jpg toGet.jpg (65.3 Кб, 142 просмотров)
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 15.09.2016 в 03:58.
OmegaBerkut вне форума Ответить с цитированием
Старый 15.09.2016, 03:56   #60
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

стек вызовов покажите.

и стоп.
не запускайте отладку в Release сборке, там бряки не работают нормально тогда!
напишите вывод в консоль, он не пострадает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wordpress, как создавать отдельные рубрики для страниц? AlienNation WordPress и другие CMS 0 09.10.2012 11:42
Именованные таблицы DiemonStar Microsoft Office Excel 4 02.10.2012 18:02
Операции класса, индексаторы Rectangle 6666 Общие вопросы .NET 4 08.05.2012 11:31
Именованные ячейки Foxx Microsoft Office Excel 1 20.02.2012 00:33
Как в Delphi создавать и использовать скины для програм SeRhy Помощь студентам 3 20.12.2007 20:59