Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 18.11.2020
Сообщений: 2

Эффект наблюдателя

14.02.2022, 20:12. Показов 1492. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте дорогие друзья, недавно столкнулся с интересной "фичой" языка C#, пока не пробовал на других ЯП, но поэкспериментировал на шарпе. Как вы поняли это связанно с эффектом наблюдателя. Многие из нас знают, что это и как оно работает (если не знаете загуглите).

Сначала немного расскажу вам о предыстории, мне надо было написать функцию для генерации рандомных символов, для кода. Написал я её быстро и решил проверить все ли правильно работает, но после запуска мне выдало 5 одинаковых символом. Я встал немного в ступор. Ведь вроде как код правильно написан, прогоняю через откладку и мне уже выдают 5 рандомных символов, что вводит меня в полное замешательство, поэкспериментировав, с мои методом, я прошел к единственному выводу, это эффект наблюдателя. И мне стало интересно как это могут объяснить другие люди, может я просто не понимаю как это работает, и это простая ошибка, но в любом случае буду рад любым ответам. Код ниже. Специально вырезал его для консольного приложения.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
// Random random = new Random(); - если объявить экземпляр классу здесь, ничего
// странного не происходит, все работает как должно
string code = "";
string allSim = "qwertyuiopasdfghjklzxcvbnm1234567890";
for(int i=0; i<5; i++)
{
  Random random = new Random(); // если же объявить экземпляр класса здесь, и запустить без точки останова, то выводит   
  //одинаковые символы, а если же с точкой останова, то уже разные
  int numSim = random.Next(allSim.Length);
  code+=allSim.Substring(numSim, 1);
}
Console.WriteLine(code);
Console.ReadKey();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2022, 20:12
Ответы с готовыми решениями:

Наблюдатель без наблюдателя
Как используя c# реализовать программу действие которой будет подобно шаблону наблюдателя.

Паттерн наблюдателя ( Observer )
Доброго времени суток, прошу помочь с моим заданием. Есть хранилище объектов и элемент TreeView. Надо используя вышеупомянутый сделать так,...

Убрать паттерн наблюдателя
Имеется код по ТЗ: Написать класс электрического чайника. Основные свойства: модель, текущий объем воды, максимальный объем воды, ...

11
sleep
 Аватар для I can
4914 / 4529 / 837
Регистрация: 13.04.2015
Сообщений: 9,662
14.02.2022, 20:15
Как же вы задолбали с этой "фичей"
0
0 / 0 / 0
Регистрация: 18.11.2020
Сообщений: 2
14.02.2022, 20:18  [ТС]
Я с ней столкнулся относительно не давно, и не смог найти более менее схожего поста, вот и решил задать, а что здесь такого? Просто хотелось бы уточнить правильно ли я решил, или же все таки ошибся
0
sleep
 Аватар для I can
4914 / 4529 / 837
Регистрация: 13.04.2015
Сообщений: 9,662
14.02.2022, 20:25
Фак для студентов и школьников

Добавлено через 5 минут
Цитата Сообщение от Dorzhi Посмотреть сообщение
а что здесь такого?
Поиск только по этому разделу форума выдаёт 171 подобную тему с этой "фичей".
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,218
14.02.2022, 21:12
Цитата Сообщение от Dorzhi Посмотреть сообщение
это связанно с эффектом наблюдателя.
Так маркетологи и работают. "Вау, вот это магия! - давай толкнем это как фичу клиентам. И звучит отлично."
1
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
14.02.2022, 21:52
Dorzhi, https://habr.com/ru/post/165459/
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
15.02.2022, 13:10
С проблемой ТСа всё понятно - это не эффект наблюдателя (ну или не совсем).
А кто сможет предложить реальный код с таким эффектом? Причем замедлить код отладкой каждый сможет. А как насчёт исказить результаты отладкой?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18234 / 14148 / 5366
Регистрация: 17.03.2014
Сообщений: 28,840
Записей в блоге: 1
15.02.2022, 13:31
tezaurismosis, вот такой класс например будет по разному себя вести если экземпляр(ы) SomeModel есть в окне Watch
C#
1
2
3
4
5
6
7
8
9
10
11
class SomeModel
{
    public int Id { get; set; }
    public string Name { get; set; }
 
    public override string ToString()
    {
        Name = Name.Remove(0, 1);
        return $"{Id} '{Name}'";
    }
}
1
15.02.2022, 14:08

Не по теме:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
вот такой класс например
Это как же себя надо ненавидеть, чтобы прописать в ToString() изменение состояния

0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
15.02.2022, 15:44
OwenGlendower, годно, спасибо.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9670 / 4823 / 762
Регистрация: 17.04.2012
Сообщений: 9,661
Записей в блоге: 14
15.02.2022, 16:06
Слегка нечестно, наверное.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Diagnostics;
 
namespace ConsoleApp
{
    class Program
    {
        static string GetStrangeString(string s)
        {
            if (Debugger.IsAttached)
                return s.ToUpper();
            return s;
        }
 
        static void Main(string[] args) {
            string x = "Hello there";
            string strange = GetStrangeString(x);
            Console.WriteLine(strange);
        }
    }
}
Миниатюры
Эффект наблюдателя  
0
 Аватар для Tsin
1180 / 488 / 188
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
17.02.2022, 19:15
tezaurismosis, вот ещё реальный [место и действующие лица изменены] код с проекта, который недавно привнес несколько боли в мой рабочий день
Код будет вести себя по-разному в случае простого запуска (Count = 1), в случае, если в окне Watch наблюдается SingletonCounter.Instance (Count = 2) или если до выполнения строчки зануления инстанса в методе Main "посмотреть" мышкой на свойство Instance (так же Count = 2).

А ещё прикольный эффект происходит, когда ты вроде бы занулил инстанс, а потом "смотришь" в него мышкой, а там - вовсе не null..

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Program
{
    static void Main(string[] args)
    {
        SingletonCounter.Instance = null;
        Console.WriteLine(SingletonCounter.Instance.Count);
    }
}
 
class SingletonCounter
{
    private static int _counter = 0;
    public int Count { get; }
 
    private SingletonCounter() { Count = ++_counter; }
 
    private static SingletonCounter _instance;
    public static SingletonCounter Instance
    {
        get
        {
            if (_instance == null)
                _instance = new SingletonCounter();
 
            return _instance;
        }
        set
        {
            _instance = null;
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2022, 19:15
Помогаю со студенческими работами здесь

Компьютерная графика. Создание наблюдателя
Доброго времени суток. Есть программа она рисует куб. Тут всё в порядке. Но мне нужно реализовать наблюдателя. Куб остаётся на месте а...

Исследование критерия идеального наблюдателя
помогите пожалуйста написать программу на С# по теме: исследование критерия идеального наблюдателя

Эффект воды
Imports System Imports System.Drawing Imports System.Collections Imports System.Windows.Forms Imports System.Drawing.Imaging ...

Зеркальный эффект
Здравствуйте. Подскажите пожалуйста, как создать для Image-а зеркальный эффект? То-есть если в изображении кто-то стоит с права, после...

Эффект лупы
Доброго времени суток! Пишу приложение на c# Windows Forms(WF) в vs 2015, нашел пример на базе WPF. Но не могу понять как переделать под...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru