Под една или друга форма често срещам следния въпрос (поставен тук в псевдокод):
String myString = "Hello"
someObject.stringProperty = myString
myString = "World"
Защо someObject.stringProperty сега не е равно на "World"?
Изглежда има объркване относно ролята, която играе следното твърдение в обяснението защо това е така:
Низовете са неизменни
Какво мислиш?
Ако смятате, че твърдението не е приложимо, бих ви попитал следното: В език, където низовете са променливи и операторът за присвояване е променил действителната им стойност (вместо просто да промени препратката), би отговорът ти все още има ли смисъл?
РЕДАКТИРАНЕ:
Добре, чувствам нужда да изясня някои неща:
Не съм объркан относно това как работят низове, препратки или присвоявания. Напълно ясен съм по тази тема. Не питам как работят струните. Питам "Каква роля играе неизменността на низове в обяснението на препратките към низове на разработчиците". Можем да пропуснем атаките на Ad-Hominem, които трябва да съм объркан.
Търся логически строг отговор за разработчика, задаващ цитирания въпрос, който не съдържа или не предполага неизменността на низовете.
Категоризация на съществуващите аргументи:
String Immutability has nothing to do with it because the references are changing, not the values of the strings
Този отговор предполага точния факт, за който питам.Assignment means assignment of references not assignment of values
Отново, това предполага точния факт, за който питам. Няма причина това трябва да е така за низовете. Това просто е случаят с низовете за производителност и други причини.
There is no reason it _must_ be the case for strings.
Това не е само случаят с низовете, така се държи операторът за присвояване в C# за всички типове. - person Rob   schedule 03.07.2011that is how the assignment operator behaves in C# for all types
, но ти не признаваш, че низовете вече имат специално синтактично третиране в C#... просто виж как се създават - така че ми е трудно да разбера как това не се възприема като език избор на дизайн. Отговорът, който продължавам да получавам от хората, изглежда е, защото това е така. Да, добре, разбирам, че това е така... не е това въпросът. - person Steve   schedule 03.07.2011Правя известно диагностично регистриране в събитието Page_Unload в приложение на asp.net, това регистриране може да отнеме доста време (около 100 ms). Ще бъде ли задържан потокът от отговори от кода в манипулатора за разтоварване на страница? Бих могъл да върша работата си асинхронно, като използвам theadpool, но предпочитам да не го правя, ако това няма да повлияе на времето за отговор на клиента.
Повече информация:
@thorkia е прав, тъй като в документацията се казва, че Page_Unload се извиква, след като отговорът бъде изпратен на клиента, но при моето тестване (както препоръча от @steve) той наистина блокира . Опитах Casini, IIS Express, Full IIS 7.5 (на тестов сървър) с компилации за освобождаване и отстраняване на грешки, със и без прикачен дебъгер. И, хващайки се за сламки, се опитах да сложа Async=true в Директивата за страницата. Опитах с Fiddler (поточното предаване е активирано) и без Fiddler. Пробвах с IE9 и Firefox. Ако документацията е „правилна“, тогава се чудя дали изпраща отговора, но може би не го „завършва“ (какво изобщо означава това, че ще трябва да проверя HTTP спецификацията) и така страницата не се изобразява в браузъра? Но моето разбиране беше, че браузърът на клиент започва да изобразява страницата, докато получава байтовете до това също няма смисъл за мен. Също така се опитах да разгледам кода в IL Spy, но мисля, че това може да ми отнеме много време.
Сега съм заинтригуван; правя ли нещо грешно или документацията е подвеждаща?
- person Gabe   schedule 03.07.2011there is no point in discussing the validity of any other case but what is currently the technical issue at hand
- Назиданието е важното. По-задълбоченото разбиране на това какво е, какво не е и защо е така, е основен аспект на растежа. Да разберем, че това е решение за езиков дизайн и да разберем защо това решение има толкова много смисъл, че всеки език (за който знам) работи по този начин - но че има и свят на езиков дизайн - в който можете да създадете свой собствен езикови правила и посрещане на компромисите – е решаваща част от разбирането какво наистина се случва. ИМО. - person Steve   schedule 03.07.2011This is a design choice rooted in the quest for simplicity and consistency
) Ако не друго, то е защото не можете да разпределите достатъчно памет за неопределен брой знаци и всяка сложна структура от данни би била твърде неефективна за основен тип като низ. - person Steve   schedule 03.07.2011