powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переписать только геттер при наследовании
148 сообщений из 148, показаны все 6 страниц
Переписать только геттер при наследовании
    #38622400
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть класс. Хочу получить такой же класс, только с другой функциональностью геттеров. Но чтобы всё остальное, включая логику сеттеров, уведомления об изменении свойств (INotifyPropertyChanged) и прочие навороты работали как в старом классе. Искал, думал - придумал пока только такой вариант. Проверил - вроде, работает так, как мне надо. Но это на простом примере, без наворотов. Покритикуйте - плохой дизайн там или ещё чего. Может, есть способ лучше решить такую задачу?

Т. е. идея в том, что в моём подходе при наследовании надо переписать только геттер, а всё остальное (сеттеры со сложной логикой, INotifyPropertyChanged и пр.) придёт само только за счёт наследования.


Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
namespace ConsoleApplication1
{
    public class A
    {
        private int _n = 1;
        public int N
        {
            get { return _n; }
            set { _n = value; }
        }

        // Дофига сложной супер-логики...
    }

    // Не менее крут, чем класс А, но только со своим геттером.
    public class B : A
    {
        new public int N
        {
            get { return 10; }
            set { base.N = value; }
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();

            Console.WriteLine(b.N);
            Console.WriteLine(((A)b).N);

            b.N = 2;

            Console.WriteLine(b.N);
            Console.WriteLine(((A)b).N);

            Console.Read();
        }
    }
}

...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622402
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, результат работы проги

10
1
10
2
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622503
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622534
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения?
Да, я бы тоже был сильно удивлен таким.
Что же до вопроса топика - чего ж здесь сложного? логику геттера помещаем в виртуальный метод, в самом геттере возращаем результат выполнения этого метода, и в классе-наследнике этот виртуальный метод переопределяем.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622597
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны, для начала бы хотелось понять, зачем вообще класс-наследник нужен. А то понадобиться ТС возвращать 20, он будет походу класс C лепить
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622622
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения?
Я хотел сделать модель представления, которая должна для одних представлений возвращать одни значения, а для других - другие. Скажем, в одном месте показывать картинку-заглушку, обозначающую, что картинка не задана, а в другом - пустое место (картинка же не задана).

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

Но потом я вычитал, что помещать такую логику в конвертеры - дурной тон. И что такая логика должна быть в моделях представления. И действительно, подумал я, чего это конвертер выполняет какую-то логику модели представления, когда он относится к представлению. Ну и поместил эту логику в модель представления. Т. е. базовая модель представления у меня показывает картинку или пустое место - в зависимости от того, есть ли картинка, а специальная модель представления, нужная в специальном месте, показывает заглушку, обозначающую, что картинка не задана.

Сон Веры ПавловныskyANAuser7320, почему свойству задаётся значение 2, а оно возвращает 10? В чём смысл такого поведения?
Да, я бы тоже был сильно удивлен таким.
Что же до вопроса топика - чего ж здесь сложного? логику геттера помещаем в виртуальный метод, в самом геттере возращаем результат выполнения этого метода, и в классе-наследнике этот виртуальный метод переопределяем.
Это тоже вариант. А это лучше или хуже моего варианта?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622628
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСон Веры Павловны, для начала бы хотелось понять, зачем вообще класс-наследник нужен. А то понадобиться ТС возвращать 20, он будет походу класс C лепить
Такой пример в возвратом 10 - для простоты. На самом деле мне просто нужна другая логика в геттере (или сеттере - не важно), но вся остальная функциональность должна остаться та же.

Понимаете? Просто хочу другой геттер, но всё остальное такое же.

Просто в Сишарпе такое ограничение, что нельзя отдельно геттеры или сеттеры переписывать в наследуемых классах - только целиком свойства. Поэтому люди и выкручиваются через методы, вызываемые геттерами-сеттерами или через вот такое, как у меня.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622759
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я хотел сделать модель представления, которая должна для одних представлений возвращать одни значения, а для других - другие. Скажем, в одном месте показывать картинку-заглушку, обозначающую, что картинка не задана, а в другом - пустое место (картинка же не задана).Не проще описать эту логику в View с помощью триггеров?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622846
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Покритикуйте - плохой дизайн там или ещё чего. Может, есть способ лучше решить такую задачу?
понимаешь разницу между overload и override ?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622887
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320Я хотел сделать модель представления, которая должна для одних представлений возвращать одни значения, а для других - другие. Скажем, в одном месте показывать картинку-заглушку, обозначающую, что картинка не задана, а в другом - пустое место (картинка же не задана).Не проще описать эту логику в View с помощью триггеров?
Например?

Я вначале пользовался конвертерами (и всё работало, как мне надо) - тоже "логика во вью". Решил отказаться от "логики во вью" по идеологическим соображениям.

pationuser7320Покритикуйте - плохой дизайн там или ещё чего. Может, есть способ лучше решить такую задачу?
понимаешь разницу между overload и override ?
Первое - метод с тем же названием, но другой остальной частью сигнатуры. Например.

А второе - при полностью совпадающей сигнатуре в унаследованных классах. Например.

А что?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38622964
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Не проще описать эту логику в View с помощью триггеров?
Например?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<ContentControl Content={Binding MyDataProperty}>
    <ContentControl.Style>
        <Style>
            <Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyDataProperty}" Value="{x:Null}">
                    <Setter Property="ContentTemplate" Value="{StaticResource EmptyTemplate}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>


user7320Я вначале пользовался конвертерами (и всё работало, как мне надо) - тоже "логика во вью". Решил отказаться от "логики во вью" по идеологическим соображениям .Ещё одна жертва информационной войны! :-)

Меньше читай "классику" ...
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623078
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320пропущено...

Например?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<ContentControl Content={Binding MyDataProperty}>
    <ContentControl.Style>
        <Style>
            <Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyDataProperty}" Value="{x:Null}">
                    <Setter Property="ContentTemplate" Value="{StaticResource EmptyTemplate}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>


Спасибо, гляну.


Здесь уже другая классика и авторитеты . Видите, какие там тысячники мнения имеют? Ну и я согласен с ними - конвертеры относятся к представлениям, а логику надо в моделях размещать. Другой вопрос, а к представлениям ли относятся конвертеры?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623111
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Здесь уже другая классика и авторитеты . Видите, какие там тысячники мнения имеют? Ну и я согласен с ними - конвертеры относятся к представлениям, а логику надо в моделях размещать. Другой вопрос, а к представлениям ли относятся конвертеры?В модели должна быть логика предметной области. В представлении - логика представления.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class Model
{
    public int Value;

    public bool IsWarning;
}

.................

public Model GetModel()
{
    var value = GetValue();

    return new Model
    {
        Value = value,
        IsWarning = value > 10 // логика предметной области
    };
}


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<TextBlock Text="{Binding Value}">
    <TextBlock.Style>
        <Style.Triggers>
            <!-- Логика представления -->
            <DataTrigger Binding="{Binding IsWarning}" Value="True">
                <Setter Property="Background" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </TextBlock.Style>
</TextBlock>
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623238
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320Здесь уже другая классика и авторитеты . Видите, какие там тысячники мнения имеют? Ну и я согласен с ними - конвертеры относятся к представлениям, а логику надо в моделях размещать. Другой вопрос, а к представлениям ли относятся конвертеры?В модели должна быть логика предметной области. В представлении - логика представления.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class Model
{
    public int Value;

    public bool IsWarning;
}

.................

public Model GetModel()
{
    var value = GetValue();

    return new Model
    {
        Value = value,
        IsWarning = value > 10 // логика предметной области
    };
}


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<TextBlock Text="{Binding Value}">
    <TextBlock.Style>
        <Style.Triggers>
            <!-- Логика представления -->
            <DataTrigger Binding="{Binding IsWarning}" Value="True">
                <Setter Property="Background" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </TextBlock.Style>
</TextBlock>


Я имел ввиду модель представления, конечно же.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623265
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это... насколько я знаю, писать логику в представлении - а конкретно, в XAML - это возникло из идеи "не давать дизайнерам смотреть код". По-моему, самое место для логики представления - не замл, не конвертеры, а так называемый код поддержки, т. е. класс представления.

В замле что-то там кодить - это было сделано для удобства дизайнеров, чтобы они конвертацию ту же не в коде писали, а в разметке.

В конвертерах - та же шняга, только теперь конвертацию дизигнерам прогеры сделали, а они нужный конвертер выбирают.

Всё это плохо, потому что ради удобства вносится бардак, хаос. Теперь код представления и, частично, модели представления разнесён по четырём местам:

моделям представления;
конвертерам;
разметке;
классам представления.

И каждый хреначит в соответствии со своей "религией" - как он видит, где должен быть код. У некоторых прямо во всех этих местах и разбросано всё - задолбаешься искать, где у него там что куда конвертится.

А вот если бы дизигнерам не подлизывали и всё строго в одном месте требовали бы размещать (ну, в двух - в модели представления и в классе представления-коде поддержки), то было бы больше порядка.


Аналогия подобного говна в ХТМЛ - когда в добавок к джаваскрипту добавили возможность писать некоторую логику в стилях. А джаваскрипт вознесли вплоть до серверов. ИДИОТЫ!
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623280
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я имел ввиду модель представления, конечно же.Модель представления, мне кажется, не должна содержать логики. Она нужна как "переходник", для сращивания модели и представления, если представление с моделью в таком виде работать не может. В ней только делегирование и преобразование.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623283
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320pationпропущено...

понимаешь разницу между overload и override ?
Первое - метод с тем же названием, но другой остальной частью сигнатуры. Например.

А второе - при полностью совпадающей сигнатуре в унаследованных классах. Например.

А что?

не совсем правильно,
ты getter хочешь оверрайдить или оверлоадить?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623286
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Аналогия подобного говна в ХТМЛ
оффтоп, этот срач в соседнем форуме
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623290
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320По-моему, самое место для логики представления - не замл, не конвертеры, а так называемый код поддержки, т. е. класс представления.Всему своё место.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623313
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320Я имел ввиду модель представления, конечно же.Модель представления, мне кажется, не должна содержать логики. Она нужна как "переходник", для сращивания модели и представления, если представление с моделью в таком виде работать не может. В ней только делегирование и преобразование.
Ну, это зависит от того, что понимать под "логикой". И это зависит от проекта. В больших проектах столько разных слоёв и так всё наворочено, что и на модель представления может немало логики перепасть.

Под логикой представления я подразумеваю всякие конвертеры-преобразователи, кнопочки подвигать (анимации) и прочие вещи, относящиеся к интерфейсу.

Под логикой модели представления я понимаю вот это ваше "переходник". В некоторых случаях переходник может быть очень даже нагружен. Я уже приводил пример - в модели только идентификатор, а в модели представления текстура (картинка), геометрия (вершины, полигоны и пр.) и прочие визуальные атрибуты.

И только под логикой модели я собственно подразумеваю логику предметной области (бизнес-логику или как хотите это назовите - я это не различаю).

pationuser7320пропущено...

Первое - метод с тем же названием, но другой остальной частью сигнатуры. Например.

А второе - при полностью совпадающей сигнатуре в унаследованных классах. Например.

А что?

не совсем правильно,
ты getter хочешь оверрайдить или оверлоадить?
Оверрайдить через оверлоад.

Я хочу переписать код геттера. Но сделать это можно только через оверлоад всего свойства - т. е. и геттера в том числе. Таковы ограничения Сишарпа.

Изопропилuser7320Аналогия подобного говна в ХТМЛ
оффтоп, этот срач в соседнем форуме
Джаваскрипт всегда уместно и вовремя поругать.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623323
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Под логикой модели представления я понимаю вот это ваше "переходник". В некоторых случаях переходник может быть очень даже нагружен. Я уже приводил пример - в модели только идентификатор, а в модели представления текстура (картинка), геометрия (вершины, полигоны и пр.) и прочие визуальные атрибуты."Как хотите это назовите - я это не различаю" (ц)

Это такая же модель, как и все остальные. Просто она расположена локально, а не в, например, вебсервисе.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623357
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320
Код: 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.
namespace ConsoleApplication1
{
    public class A
    {
        private int _n = 1;
        public int N
        {
            get { return _n; }
            set { _n = value; }
        }

        // Дофига сложной супер-логики...
    }

    // Не менее крут, чем класс А, но только со своим геттером.
    public class B : A
    {
        new public int N
        {
            get { return 10; }
            set { base.N = value; }
        }
    }


  
}


Как то так надо.
Код: 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.
  public class A
    {
        int _Prop;
        public virtual int Prop
        {
            get
            {
                return _Prop;
            }
            set
            {
                _Prop = value;
            }
        }
    }
    public class B : A
    {
        public override int Prop
        {
            get
            {
                return 10;
            }
            set
            {
                base.Prop = value;
            }
        }
    }
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623363
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще не пойму, зачем разделили понятия Model и ViewModel. Мне кажется, достаточно одного понятия Model. ViewModel только добавляет путаницу.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623398
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВuser7320
Код: 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.
namespace ConsoleApplication1
{
    public class A
    {
        private int _n = 1;
        public int N
        {
            get { return _n; }
            set { _n = value; }
        }

        // Дофига сложной супер-логики...
    }

    // Не менее крут, чем класс А, но только со своим геттером.
    public class B : A
    {
        new public int N
        {
            get { return 10; }
            set { base.N = value; }
        }
    }


  
}


Как то так надо.
Код: 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.
  public class A
    {
        int _Prop;
        public virtual int Prop
        {
            get
            {
                return _Prop;
            }
            set
            {
                _Prop = value;
            }
        }
    }
    public class B : A
    {
        public override int Prop
        {
            get
            {
                return 10;
            }
            set
            {
                base.Prop = value;
            }
        }
    }


Так по сути это то же самое?

Я, кстати, не понимаю, в чём разница между парой "virtual-override" и "new". New вроде как просто убирает предупреждение компилятора - типа, прогер сознательно скрыл метод или свойство базового класса, а не по ошибке.

Алексей КЯ вообще не пойму, зачем разделили понятия Model и ViewModel. Мне кажется, достаточно одного понятия Model. ViewModel только добавляет путаницу.
Я же приводил пример с идентификаторами и картинками.

Вот тем, у тех, у кого нет такой специфики - действительно, у них М и ВМ выглядят одинаково и ВМ так кажется лишним слоем. Для простых приложений и не надо выдумывать всякие МВВМ. А вот напишите Офис - там ещё и не такое придумаете. Некоторые вообще аспектно-ориентированное программирование любят.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623580
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я, кстати, не понимаю, в чём разница между парой "virtual-override" и "new"
я же спрашивал тебя =))
учи матчасть
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623582
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Оверрайдить через оверлоад.
=)) писец
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623612
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationuser7320Я, кстати, не понимаю, в чём разница между парой "virtual-override" и "new"
я же спрашивал тебя =))
учи матчасть
Не люблю я ответы, где из всего стоящее только "учи матчасть". Можно форумы все позакрывать и повесить заглушку на главную с крупными буквами "УЧИ МАТЧАСТЬ". Ну и баннеров вокруг понавтыкать.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623621
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Вот тем, у тех, у кого нет такой специфики - действительно, у них М и ВМ выглядят одинаково и ВМ так кажется лишним слоем.Не лишним, а чем-то отличающимся от других слоёв логики настолько, чтобы иметь специальное название.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623625
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Class
{
  public virtual void Foo()
  {
    Console.WriteLine("Class.Foo");
  }
}

public class Derived1: Class
{
  public new void Foo()
  {
    Console.WriteLine("Derived1.Foo");
  }
}



а теперь попробуй создать класс Derived2 : Derived1, в котором оверрайдится Foo. Это раз.
Далее:
Код: c#
1.
2.
Class v = new Derived1();
v.Foo();


Вопрос: что будет в консольном выводе? И что будет в случае override? Вопрос на пятерку - объяснить различие консольных выводов.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623640
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationuser7320Я, кстати, не понимаю, в чём разница между парой "virtual-override" и "new"
я же спрашивал тебя =))
учи матчасть

Я вот не знаю, как это понимать:
http://msdn.microsoft.com/en-us/library/435f1dw2.aspx It is an error to use both new and override on the same member, because the two modifiers have mutually exclusive meanings. The new modifier creates a new member with the same name and causes the original member to become hidden. The override modifier extends the implementation for an inherited member.
Наверное, отличия во внутреннем представлении в CLR или где там. А для программиста это выглядит одинаково - и так и так (и через new, и через override) я скрываю метод базового класса и не могу его вызвать из текущего класса. Но могу вызвать его через base или через приведение к базовому.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623657
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
Или вы очень криво выражаетесь, или не понимаете, что override и new это совершенно разные вещи:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class A
{
     public virtual void M() { throw new Exception(); }
}

public class B : A
{
     public override void M() { Console.WriteLine("B"); }
}

public class C : A
{
     public new void M() { Console.WriteLine("C"); }
}

new B().M() // "B"
((A)(new B())).M() // "B"

new C().M() // "C"
((A)(new C())).M() // Exception
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623659
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныuser7320,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Class
{
  public virtual void Foo()
  {
    Console.WriteLine("Class.Foo");
  }
}

public class Derived1: Class
{
  public new void Foo()
  {
    Console.WriteLine("Derived1.Foo");
  }
}



а теперь попробуй создать класс Derived2 : Derived1, в котором оверрайдится Foo. Это раз.

Ну, второй-то Фу я прооверрайдю (через ещё один new), а первый-то нет - он же скрыт.

Ну, я понял теперь, в чём разница. Но для первого уровня наследования разницы нет?

Сон Веры ПавловныДалее:
Код: c#
1.
2.
Class v = new Derived1();
v.Foo();


Вопрос: что будет в консольном выводе? И что будет в случае override? Вопрос на пятерку - объяснить различие консольных выводов.
В выводе будет Фу от Class. Почему - не знаю.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623660
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныДалее:
Код: c#
1.
2.
Class v = new Derived1();
v.Foo();


Вопрос: что будет в консольном выводе? И что будет в случае override? Вопрос на пятерку - объяснить различие консольных выводов.
При этом при оверрайде - Фу от Derived1.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623668
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

у меня такой вывод:

// Если в Derived1 new

Class.Foo
Derived1.Foo
Derived2.Foo
Class.Foo
ConsoleApplication1.Derived1


// Если в Derived1 override

Class.Foo
Derived1.Foo
Derived2.Foo
Derived1.Foo
ConsoleApplication1.Derived1

Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public class Class
{
	public virtual void Foo()
	{
		Console.WriteLine("Class.Foo");
	}
}

public class Derived1 : Class
{
	public new void Foo()
	{
		Console.WriteLine("Derived1.Foo");
	}
}

public class Derived2 : Derived1
{
	public new void Foo()
	{
		Console.WriteLine("Derived2.Foo");
	}
}


class Program
{
	static void Main(string[] args)
	{
		Class c = new Class();
		c.Foo();
		Derived1 d1 = new Derived1();
		d1.Foo();
		Derived2 d2 = new Derived2();
		d2.Foo();
		Class cc = new Derived1();
		cc.Foo();
		Console.WriteLine(cc.GetType());

		Console.Read();
	}
}

...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623669
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

Модификатор new создает новый член с таким же именем и приводит к скрытию исходного члена. Модификатор override расширяет реализацию для наследуемого члена.

Взято отсюда: http://msdn.microsoft.com/ru-ru/library/435f1dw2.aspx
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623682
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchuser7320,

Модификатор new создает новый член с таким же именем и приводит к скрытию исходного члена. Модификатор override расширяет реализацию для наследуемого члена.

Взято отсюда: http://msdn.microsoft.com/ru-ru/library/435f1dw2.aspx
Так я про то же цитату и привёл. И мне эти слова мало о чём говорят. Чем "сокрытие" отличается от "расширения"? Без примеров это пустые слова.

Ну, мне уже объяснили выше. Правда, я всё равно не понял, почему это так происходит.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623686
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchuser7320,
Или вы очень криво выражаетесь, или не понимаете, что override и new это совершенно разные вещи:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class A
{
     public virtual void M() { throw new Exception(); }
}

public class B : A
{
     public override void M() { Console.WriteLine("B"); }
}

public class C : A
{
     public new void M() { Console.WriteLine("C"); }
}

new B().M() // "B"
((A)(new B())).M() // "B"

new C().M() // "C"
((A)(new C())).M() // Exception


Это то же, что и у Сон Веры Павловны. Я всё равно не понимаю, почему это так происходит.

Кстати, вот эти ваши слова
авторМодификатор new создает новый член с таким же именем и приводит к скрытию исходного члена. Модификатор override расширяет реализацию для наследуемого члена.

Взято отсюда: http://msdn.microsoft.com/ru-ru/library/435f1dw2.aspx
противоречат вашему примеру. В примере в третьем случае new должен скрыть исключение (ну таписано же так!), а он его наоборот - показывает.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623691
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

и в рантайме ((A)(new C())) является типом С, а не А (в аналогичном примере Сон Веры Павловны это видно - я GetType() вызывал). Но вызывается метод из А почему-то.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623695
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут ещё что-то намешно из приведения типов. Вот в МСДН для new простой пример приведён без приведения типов - и работает всё так, как объяснено. Но стоит только войти в игру приведению типов, как всё с ног на голову встаёт.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623734
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

(То что я описываю - мое упрощенное понимание, судя по http://msdn.microsoft.com/en-us/magazine/cc163791.aspx - все несколько сложнее)

потому что метод C.M() это новый метод, никакого отношения к A.M() не имеющий.
Судя по сигнатуре вызова метода в IL (пример отсюда ): IL_0002: call instance void ConsoleApplication1.Base::foo()
для
((A)(new B())).M()
((A)(new C())).M()
вызов в IL будет выглядеть одинаково: call instance void A::M();

Так как метод M() вирутальный, то будет применен виртуальный вызов. CLR определит реальный тип объекта (B и С) и начнет искать "ближайшее" к ним в иерархии наследования переопределение меторда.
В случае класса B - это переопределение выполнено в нем самом, будет взята его релизация.
В случае класса C - переопределение не выполнялось, метода C.M() нет в таблице виртуальных методов (если добавить если слово Virtual, он там появится, НО! это в любом случае совершенно новый метод, не имеющий отношения к методу A.M(), и не являющийся его новой реализацией) - поэтому будет вызван метод A.M();

Как то так, надеюсь троечку от Сна Веры Павловны я заслужил
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623763
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

поправка, вызов будет callvirt instance void A::M() (виртуальный вызов)
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623771
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,
авторТак как метод M() вирутальный, то будет применен виртуальный вызов
и да и нет, виртуал может быть и для простого экземплярного, и просто call все зависит от кода..

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 class Program
    {
        static void Main(string[] args)
        {
            var e = new MyClass().Foo();//?
            var f= new MyClass();
            var ee = f.Foo();//?
        }

        class MyClass
        {
            public  int Foo()
            {
                return 3;
            }
        }
    }
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623779
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

я же говорил о своем примере, метод A::M() помечен как виртуальный
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623783
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,
я ничего против не имею, но строчку "Так как метод M() вирутальный, то будет применен виртуальный вызов" можно и убрать
так как она наводит на мысль, если метод будет не виртуальный то и вызов будет не вертуальный..
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623787
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

да я бы там много что брал, в том числе орфографические ошибки) но кнопки редактирования нет )
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623825
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchuser7320,

(То что я описываю - мое упрощенное понимание, судя по http://msdn.microsoft.com/en-us/magazine/cc163791.aspx - все несколько сложнее)

потому что метод C.M() это новый метод, никакого отношения к A.M() не имеющий.
Судя по сигнатуре вызова метода в IL (пример отсюда ): IL_0002: call instance void ConsoleApplication1.Base::foo()
для
((A)(new B())).M()
((A)(new C())).M()
вызов в IL будет выглядеть одинаково: call instance void A::M();

Так как метод M() вирутальный, то будет применен виртуальный вызов. CLR определит реальный тип объекта (B и С) и начнет искать "ближайшее" к ним в иерархии наследования переопределение меторда.
В случае класса B - это переопределение выполнено в нем самом, будет взята его релизация.
В случае класса C - переопределение не выполнялось, метода C.M() нет в таблице виртуальных методов (если добавить если слово Virtual, он там появится, НО! это в любом случае совершенно новый метод, не имеющий отношения к методу A.M(), и не являющийся его новой реализацией) - поэтому будет вызван метод A.M();
Я вот чего не понимаю. Почему "реальный тип объекта" - В и С, а метод вызывается как от А? Я так понимаю, что приведение к менее унаследованному типу как бы "отсекает" функциональность более унаследованных типов. Да? Но при этом объект остаётся по-прежнему более унаследованным, а не тем, к которому он приведён. Так?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623828
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320менее унаследованному
user7320более унаследованным
что за терминология?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623901
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилuser7320менее унаследованному
user7320более унаследованным
что за терминология?Нечёткая логика?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623902
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Не пойму, ты с ООП что ли не знаком? В ужасе читать классику про инкапсуляция/наследование/ полиморфизм .
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38623916
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы меня запутали! Это вы во всём виноваты! До того, как я сюда зашёл, у меня был нормальный такой маленький new, который оверрайдил оверлоадом геттер свойства более унаследованного класса и вообще работал. А с вами я скоро алфавит начну забывать, не то, что нечёткую логику пременять.

Лучше пойду джаваскрипт изучать...
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624140
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, ты же сам просил критики. Ты её получил.

А насчёт "у меня был нормальный такой маленький new": ИМХО не фиг ради каждого куска кода топик создавать и просить оценивать "дизайн там или ещё чего".

Запишись на курсы, там проведут Code Review твоей поделки.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624175
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, ты же сам просил критики. Ты её получил.
Да всё нормально. Так и надо. ))

skyANAА насчёт "у меня был нормальный такой маленький new": ИМХО не фиг ради каждого куска кода топик создавать и просить оценивать "дизайн там или ещё чего".

Запишись на курсы, там проведут Code Review твоей поделки.
Но тут же бесплатно...

...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624412
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА насчёт "у меня был нормальный такой маленький new"
Я насчет этого давно уже считаю, что new - это очень возможный признак кривизны архитектуры. Соответственно, стараюсь его всячески избегать.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624513
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныskyANAА насчёт "у меня был нормальный такой маленький new"
Я насчет этого давно уже считаю, что new - это очень возможный признак кривизны архитектуры. Соответственно, стараюсь его всячески избегать.Соглашусь. Сразу возникает подозрение, что что-то здесь не так.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624627
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСон Веры Павловныпропущено...

Я насчет этого давно уже считаю, что new - это очень возможный признак кривизны архитектуры. Соответственно, стараюсь его всячески избегать.Соглашусь. Сразу возникает подозрение, что что-то здесь не так.
Но ведь зачем-то же new придумали. Дотнет, поди, не дураки делают.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624737
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Соглашусь. Сразу возникает подозрение, что что-то здесь не так.
Но ведь зачем-то же new придумали. Дотнет, поди, не дураки делают.
Конечно не дураки :)
Есть к примеру твой класс, унаследованный от класса из сторонней dll, и есть в твоем классе метод М1. Все хорошо было, пока не выпустили новую версии dll и твоем любимом базовом классе не появился метод М1. Компилятор автоматически подставит модификатор new, дабы не рушить твоего счастья!
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624838
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВuser7320пропущено...

Но ведь зачем-то же new придумали. Дотнет, поди, не дураки делают.
Конечно не дураки :)
Есть к примеру твой класс, унаследованный от класса из сторонней dll, и есть в твоем классе метод М1. Все хорошо было, пока не выпустили новую версии dll и твоем любимом базовом классе не появился метод М1. Компилятор автоматически подставит модификатор new, дабы не рушить твоего счастья!
Т. е. по-вашему, это такой костылик, решающий проблему версионностей и раздельной разработки, а не относящийся к языку?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624842
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320ЕвгенийВпропущено...

Конечно не дураки :)
Есть к примеру твой класс, унаследованный от класса из сторонней dll, и есть в твоем классе метод М1. Все хорошо было, пока не выпустили новую версии dll и твоем любимом базовом классе не появился метод М1. Компилятор автоматически подставит модификатор new, дабы не рушить твоего счастья!
Т. е. по-вашему, это такой костылик, решающий проблему версионностей и раздельной разработки, а не относящийся к языку?
Т. е. для целей оверрайдинга оверлоадом надо использовать именно virtual-override?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624853
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

user7320оверрайдинга оверлоадом
щито?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624858
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

вы вообще разницу между override и overload знаете ?)
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624862
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Т. е. для целей оверрайдинга оверлоадом надо использовать именно virtual-override?
Не, кое-кому точно нужно кое-что почитать. Гради Буча, например. Потому как "оверрайдинг оверлоадингом" - это теплое с мягким. Оверлоадинг - это перегрузка методов по сигнатуре :
Код: c#
1.
2.
3.
public void DoSome() {...}
public void DoSome(string name) {...}
public void DoSome(int id) {...}


а вовсе не все эти выкрутасы с new.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624888
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchuser7320,

user7320оверрайдинга оверлоадом
щито?
В Сишарпе явно не хватает множественного наследования классов для полного счастья, я считаю. Чтобы как в С++.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624892
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320В Сишарпе явно не хватает множественного наследования классов для полного счастья, я считаю.
почему "явно" ?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624894
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchuser7320,

user7320оверрайдинга оверлоадом
щито?
Ну а вообще, если отвлечься от незначительных и неважных вещей и вернуться к началу темы, чем вариант, предложенный Сон Веры Павловны - через оверрайдинг отдельного метода, вызываемого геттером - может быть лучше оверрайдинга самого геттера (через оверрайдинг свойства, но в сеттере вызывается базовый сеттер)?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624896
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилuser7320В Сишарпе явно не хватает множественного наследования классов для полного счастья, я считаю.
почему "явно" ?
Потому что оверлоадинг оверрайдингом я слишком быстро изучил. Да и вы тоже подтягиваетесь, я смотрю.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624907
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Lelouchuser7320,

пропущено...

щито?
Ну а вообще, если отвлечься от незначительных и неважных вещей и вернуться к началу темы, чем вариант, предложенный Сон Веры Павловны - через оверрайдинг отдельного метода, вызываемого геттером - может быть лучше оверрайдинга самого геттера (через оверрайдинг свойства, но в сеттере вызывается базовый сеттер)?

Чем же вас виртуальное свойство не устроило, оверлоадер оверрайдингом вы наш?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class A
{
	private string _p;

	public virtual string P
	{
		get
		{
			return _p;
		}
		set
		{
			_p = value;
			RaisePropertyChanged("P");
		}
	}
}

public class B : A
{
	public override string P { get { return ""; }}
}
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624936
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchuser7320,

user7320оверрайдинга оверлоадом
щито?
Триангуляционная симпелляция деструбных гентронов ротора турбулентности дивергенции - элементарнейшая вещь!
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38624942
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныuser7320,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Class
{
  public virtual void Foo()
  {
    Console.WriteLine("Class.Foo");
  }
}

public class Derived1: Class
{
  public new void Foo()
  {
    Console.WriteLine("Derived1.Foo");
  }
}



а теперь попробуй создать класс Derived2 : Derived1, в котором оверрайдится Foo. Это раз.
Далее:
Код: c#
1.
2.
Class v = new Derived1();
v.Foo();


Вопрос: что будет в консольном выводе? И что будет в случае override? Вопрос на пятерку - объяснить различие консольных выводов.
ыыы это же вопрос на собеседовании сразу почему отличий реф и вал ))
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625031
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchuser7320пропущено...

Ну а вообще, если отвлечься от незначительных и неважных вещей и вернуться к началу темы, чем вариант, предложенный Сон Веры Павловны - через оверрайдинг отдельного метода, вызываемого геттером - может быть лучше оверрайдинга самого геттера (через оверрайдинг свойства, но в сеттере вызывается базовый сеттер)?

Чем же вас виртуальное свойство не устроило, оверлоадер оверрайдингом вы наш?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class A
{
	private string _p;

	public virtual string P
	{
		get
		{
			return _p;
		}
		set
		{
			_p = value;
			RaisePropertyChanged("P");
		}
	}
}

public class B : A
{
	public override string P { get { return ""; }}
}


Я не против. Я спрашиваю, чем лучше или хуже вариант Сна - который через виртуальный метод.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625070
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanСон Веры Павловныuser7320,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class Class
{
  public virtual void Foo()
  {
    Console.WriteLine("Class.Foo");
  }
}

public class Derived1: Class
{
  public new void Foo()
  {
    Console.WriteLine("Derived1.Foo");
  }
}



а теперь попробуй создать класс Derived2 : Derived1, в котором оверрайдится Foo. Это раз.
Далее:
Код: c#
1.
2.
Class v = new Derived1();
v.Foo();


Вопрос: что будет в консольном выводе? И что будет в случае override? Вопрос на пятерку - объяснить различие консольных выводов.
ыыы это же вопрос на собеседовании сразу почему отличий реф и вал ))
Причём тут реф и вал?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625072
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320netivanпропущено...

ыыы это же вопрос на собеседовании сразу почему отличий реф и вал ))
Причём тут реф и вал?Он имел в виду, что это следующий вопрос на собеседовании после вопроса про "по ссылке" и "по значению".
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625102
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
вот еще разминка
без компила что будет?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 static void Main(string[] args)
        {
            int i = 0;
            Console.WriteLine(i + Add(ref i));
        }

        static int Add(ref int i)
        {
            return i++;
        }
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625129
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
вот еще разминка
без компила что будет?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 static void Main(string[] args)
        {
            int i = 0;
            Console.WriteLine(i + Add(ref i));
        }

        static int Add(ref int i)
        {
            return i++;
        }


Будет 2. Но это для задротов, которые зазубривают порядок выполнения бинарных операторов. Я вот в Сишарпе не знаю, а в С++ 99 сначала выполняется правое выражение, потом левое, а потом выполняется оператор сложения. Соответственно, сначала приращение до единицы, затем сумма двух единиц.

Не понимаю, нах такие вопросы задавать на собеседованиях. Всё равно когда кодишь, такие нюансы из головы вылетают. Или эти задавальщики вопросов на самом деле думают, что прогер каждый символ своего кода со всех сторон обсасывает? - "а что будет, если так?... а если этак?... а если в Андромеде сверхновая вспыхнет? - вдруг код упадёт?!". Да когда о проблеме предметной области думаешь, сраным синтаксисом меньше всего голова забита. Вот кодерам, которым дают только методы заполнять, а всю структуру приложения за них продумывают - этим да, только о синтаксисе и порядке выполнения операторов и думать. Они всё равно из процедурного программирования не вылазиют.

Ещё Луговский говорил, что тот, кто хорошо знает С++ (и С# туда же) - просто хорошая зубрилка.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625131
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Причём тут реф и вал?Он имел в виду, что это следующий вопрос на собеседовании после вопроса про "по ссылке" и "по значению".
Это где такие говно-собеседования? Приходишь ты такой на собеседование. В ризюме у тебя такие-то проекты, такие-то ссылки на гитхабы там всякие, сайты, тобой сделанные. И вместо того, чтобы обсуждать с тобой твои проекты и что ты умеешь, тебе всякую куйню задают, в надежде на то, что какой-то нюансик ты да подзабыл. И тогда с гордым и сияющим видом 23-летний сеньор говорит тебе, что ты, мол, не подходишь - мало зубрил спецификации языка.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625137
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Он имел в виду, что это следующий вопрос на собеседовании после вопроса про "по ссылке" и "по значению".
Это где такие говно-собеседования? Приходишь ты такой на собеседование. В ризюме у тебя такие-то проекты, такие-то ссылки на гитхабы там всякие, сайты, тобой сделанные. И вместо того, чтобы обсуждать с тобой твои проекты и что ты умеешь, тебе всякую куйню задают, в надежде на то, что какой-то нюансик ты да подзабыл. И тогда с гордым и сияющим видом 23-летний сеньор говорит тебе, что ты, мол, не подходишь - мало зубрил спецификации языка.Чушь не неси. Понятно же что опытных людей так не собеседуют, а только junior-ов вроде тебя.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625203
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
Охуи.. но Вас послушал, вспомнил детство ( когда смотрел по телевизору выступление ансамБЛЯ песни и пляски Сов.Армии)
так же все скачут и ничего не понятно, потом вспомнил что и сегодня видел такой же долбоебический бред на просторах вселенной,
( не буду ссылить, а то привлекут за терроризм), мда....
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625212
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
вот еще разминка
без компила что будет?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 static void Main(string[] args)
        {
            int i = 0;
            Console.WriteLine(i + Add(ref i));
        }

        static int Add(ref int i)
        {
            return i++;
        }


Дурацкий вопрос!
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625217
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ, обоснуйте
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625221
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиЕвгенийВ, обоснуйте
ref нужен больше для взаимодействия с неуправляемым кодом, использовать его напрямую в управляемом - плохая практика...
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625222
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
сколько?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625226
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,
Чего сколько?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625227
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
что в консоли?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625231
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиЕвгенийВ,
что в консоли?
Мой мозг не способен воспринять такую цикломатическую сложность.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625235
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
равнозначный ли код ( смотри выше) и этот?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        static void Main(string[] args)
        {
            int i = 0;
            int ii = Adds(ref i);
            Console.WriteLine(i + ii );
        }

        static int Adds(ref int i)
        {
                return i++;
        }
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625240
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,
Не интересно!
Я больше люблю нечто подобное :)
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625245
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
каждому своё мне нраца мурмур
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625275
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВГде-то в степи,
Не интересно!
Я больше люблю нечто подобное :)
Децкий лепет на лужайке.
Мужыки посерьёзнее развлекаются как-то вот так .
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625283
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиЕвгенийВ,
сколько?
0
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625289
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Где-то в степиЕвгенийВ,
сколько?
0
Что-то херня какая-то. Вот в этом коде (ваш же год, только добавил переменных для контроля)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        static void Main(string[] args)
        {
            int i = 0;
            int b = Add(ref i);
            int a = i + b;
            Console.WriteLine(a);
            Console.Read();
        }

        static int Add(ref int i)
        {
            int s = i++;
            return s;
        }


В точке останова на return s; показывает, что i = 1, а s = 0. А результат общий - 1. Как такое может быть? Почему 1 не присваивается s?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625290
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут всё присваивается http://msdn.microsoft.com/en-us/library/14akc2c7.aspx
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625296
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320user7320пропущено...

0
Что-то херня какая-то. Вот в этом коде (ваш же год, только добавил переменных для контроля)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        static void Main(string[] args)
        {
            int i = 0;
            int b = Add(ref i);
            int a = i + b;
            Console.WriteLine(a);
            Console.Read();
        }

        static int Add(ref int i)
        {
            int s = i++;
            return s;
        }


В точке останова на return s; показывает, что i = 1, а s = 0. А результат общий - 1. Как такое может быть? Почему 1 не присваивается s?
Короче говоря, нет присваивания s, и нет присваивания b.

А, ещё в точке останова на строчке return s; в окне Locals значение i горит красненьким и равно 1, а при переходе на следующую строчку оно уже горит белерьким. Это что значит?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625297
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВГде-то в степиЕвгенийВ,
что в консоли?
Мой мозг не способен воспринять такую цикломатическую сложность.
А Евгений прав. Вот такую куйню

авторThe difference between the following two:
DoSomething(x++); // notice x first, then ++
DoSomething(++x); // notice ++ first, then x

Is that in the first one, the method DoSomething will see the previous value of x before it was incremented. In the second one, it will see the new (incremented) value.

с посылом в методы инкрементов - это как раз джуниоры и делают. Вот им и надо разбираться в этой куйне. А норм пацаны все операции с переменными делают до вызова метода, а не во время, поэтому у них такой ерунды из получающихся абракадабр не бывает и им в этих искусственно созданных дебрях разбираться не надо.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625304
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320и им в этих искусственно созданных дебрях разбираться не надо.
Откуда у меногих начинающих потсанов автоматически следует, что букварь читать не надо тоже. Например, главы про ООП.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625310
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Почему 1 не присваивается s?Потому что это постфиксный инкремент.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625313
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320Почему 1 не присваивается s?Потому что это постфиксный инкремент.
И что? Приоритет присваивания самый низкий и постфикс идёт перед ним. И вот логика работы постфикса:
http://msdn.microsoft.com/en-us/library/aa691363(v=vs.71).aspx If x is classified as a variable:
x is evaluated to produce the variable.
The value of x is saved.
The selected operator is invoked with the saved value of x as its argument.
The value returned by the operator is stored in the location given by the evaluation of x.
The saved value of x becomes the result of the operation.
Т. е. сначала выполняется всё, что справа от присваивания, затем результат присваивается. Почему в программе не так?

Результат должен быть одинаков и для постфикса, и для префикса - сначала этот самый фикс, а потом присваивание - см. таблицу приоритетов операторов.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625346
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320 http://msdn.microsoft.com/en-us/library/aa691363(v=vs.71).aspx If x is classified as a variable:
x is evaluated to produce the variable.
The value of x is saved.
The selected operator is invoked with the saved value of x as its argument.
The value returned by the operator is stored in the location given by the evaluation of x.
The saved value of x becomes the result of the operation.
Т. е. сначала выполняется всё, что справа от присваивания, затем результат присваивается. Почему в программе не так?
.

Перевели по пунктам, что тут написано - и поймешь
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625355
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Потому что это постфиксный инкремент.
И что?И всё. :-)
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625358
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320И вот логика работы постфикса...Не нужно искать логику там где её нет. Это всё пошло из С++, чтобы в котором можно было писать конструкции вида:
Код: plaintext
1.
2.
while (*p)
    sum += *p++;
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625360
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныЕвгенийВГде-то в степи,
Не интересно!
Я больше люблю нечто подобное :)
Децкий лепет на лужайке.
Мужыки посерьёзнее развлекаются как-то вот так .
Во всем должен быть практический смысл!
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625364
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСон Веры Павловныпропущено...

Децкий лепет на лужайке.
Мужыки посерьёзнее развлекаются как-то вот так .
Во всем должен быть практический смысл!Кто-то шахматами мозг разминает, кто-то этим...
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625385
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisuser7320If x is classified as a variable:
x is evaluated to produce the variable.
The value of x is saved.
The selected operator is invoked with the saved value of x as its argument.
The value returned by the operator is stored in the location given by the evaluation of x.
The saved value of x becomes the result of the operation.

Т. е. сначала выполняется всё, что справа от присваивания, затем результат присваивается. Почему в программе не так?
.

Перевели по пунктам, что тут написано - и поймешь
Перевёл и не понял. Берётся х. Сохранятеся в х (не знаю, зачем сохранять там, где она и так уже есть - но так написано). Приращивается на ++. Сохраняется там же. Теперь результат всего этого оказывается справа и должен быть присвоен операнду слева (когда присвоение используешь). Почему не присваивается?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625392
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320И вот логика работы постфикса...Не нужно искать логику там где её нет. Это всё пошло из С++, чтобы в котором можно было писать конструкции вида:
Код: plaintext
1.
2.
while (*p)
    sum += *p++;


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

А если по адресу p будет 0? Цикл закончится.



И какое это всё имеет отношение к тому, что в примере Где-то в степи и моём не происходит присваивания? Почему присваивания не происходит-то, а?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625396
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторThe ++ and -- operators also support prefix notation, as described in Section 7.6.5. The result of x++ or x-- is the value of x before the operation, whereas the result of ++x or --x is the value of x after the operation.
Я вот тут не понял.

int x = 0;
int y = x++;

Берём выражение 2: int y = x++;

По таблице приоритетов операторов в этом выражении первым выполняется оператор ++. Потом присваивание. Почему на самом деле произошло наоборот - сначала присваивание, потом ++?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625404
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, не тупи, написано же: The saved value of x becomes the result of the operation.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625408
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Почему на самом деле произошло наоборот - сначала присваивание, потом ++?
по спецификации языка
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625417
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, ты подумай над следующим: в чём разница между постфиксной и префиксной операций, если следовать твоей логике?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625421
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилuser7320Почему на самом деле произошло наоборот - сначала присваивание, потом ++?
по спецификации языка
Это не ответ.

авторThe result of x++ or x-- is the value of x before the operation, whereas the result of ++x or --x is the value of x after the operation.
Это ответ. Но это противоречит таблице приоритетов операторов. Мол, забейте на таблицу и читайте, что ТУТ у нас написано.

skyANAuser7320, не тупи, написано же: The saved value of x becomes the result of the operation.
И я о том же.

Разберём выражения

int x = 0;
int a = x++;

по алгоритму из МСДН:

авторIf x is classified as a variable:
x is evaluated to produce the variable.
The value of x is saved.
The selected operator is invoked with the saved value of x as its argument.
The value returned by the operator is stored in the location given by the evaluation of x.
The saved value of x becomes the result of the operation.
x is evaluated to produce the variable:
x=0;
a=0

The value of x is saved:
x=0;
a=0

The selected operator is invoked with the saved value of x as its argument:
x=0;
a=0

The value returned by the operator is stored in the location given by the evaluation of x:
x=1;
a=0

The saved value of x becomes the result of the operation:

в этот момент второе выражение эквивалентно

int a = 1;

и результат должен быть:
x=1;
a=1

Так какого это не так?!




Вот ещё полюбуйтесь:
http://stackoverflow.com/questions/6716189/i-i-doesnt-increment-i-why

Что интересно, ответ, помеченный зелёным, ничерта почти не объясняет.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625422
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, ты подумай над следующим: в чём разница между постфиксной и префиксной операций, если следовать твоей логике?
Я читаю, что вижу, и доверяю этому. Как написано, так я и понимаю. Потом беру, компиляю и получаю, что всё наоборот. Что делать? - Вешать того косноязычного идиота, кто писал пояснения в МСДН так, что всё наоборот выходит, чем там написано?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625424
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я могу только сказать, что таблица операторов никуя не отображает действительность. Т. е., плять, сначала выполняется присваивание старого значения х левому операнду, а потом приращение старого значения х присваивается самому х. ВОПРЕКИ преоритету операторов. Какого буя?!
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625427
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т. е. ни таблица приоритетов, ни алгоритм, что я выше разобрал, не отображаются действительноть.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625429
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320
The value of x is saved:


saved в другое место в памяти
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625431
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisuser7320The value of x is saved:


saved в другое место в памяти
Это нигде не написано, что в другое место. В вашей нотации это выглядит как КЛОНИРОВАНИЕ, а не сохранение.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625434
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, я понял. Надо найти и убить того сраного индуса или кто там у них, который писал эту статью в МСДН.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625435
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://msdn.microsoft.com/en-us/library/aa691363(v=vs.71).aspx If x is classified as a variable:
1.x is evaluated to produce the variable.
2.The value of x is saved.
3.The selected operator is invoked with the saved value of x as its argument.
4.The value returned by the operator is stored in the location given by the evaluation of x.
5.The saved value of x becomes the result of the operation.

1. Вычисляем x
2. __x = x;
3/4. x = x+1;
5. return __x;
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625437
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Почему присваивания не происходит-то, а?Присваивание происходит после чтения значения переменной. Тебя в институте на первом курсе не учили этому чтоле?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625438
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

чё такие лёгкие задачки даёшь? Ну теперь-то, когда я понял, что МСДН писали дураки, я сразу могу сказать, что нолик будет в твоей задачке. Это ж для детсадовцев!
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625439
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320Почему присваивания не происходит-то, а?Присваивание происходит после чтения значения переменной. Тебя в институте на первом курсе не учили этому чтоле?
Ты не правильно объясняешь. Палларис правильно объяснил.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625441
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Вот ещё полюбуйтесь:
http://stackoverflow.com/questions/6716189/i-i-doesnt-increment-i-why
Что интересно, ответ, помеченный зелёным, ничерта почти не объясняет.

По-моему, все как раз четко расписано
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625446
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisuser7320Вот ещё полюбуйтесь:
http://stackoverflow.com/questions/6716189/i-i-doesnt-increment-i-why
Что интересно, ответ, помеченный зелёным, ничерта почти не объясняет.

По-моему, все как раз четко расписано
Когда подсказали, что оператор ++, работающий с ОДНОЙ переменной, задействует ДВЕ переменные, одна из которых как бы скрытая, тогда всё стало ясно.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625447
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAuser7320, ты подумай над следующим: в чём разница между постфиксной и префиксной операций, если следовать твоей логике?
Я читаю, что вижу, и доверяю этому. Как написано, так я и понимаю. Потом беру, компиляю и получаю, что всё наоборот. Что делать? - Вешать того косноязычного идиота, кто писал пояснения в МСДН так, что всё наоборот выходит, чем там написано?Несмышлёный ты, вот и вся проблема.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625450
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, ты подумай над следующим: в чём разница между постфиксной и префиксной операций, если следовать твоей логике?
Т. е. вместо того, чтобы доверять написанному, ты действуешь методом исключения невероятных вариантов? Это программирование или детективное расследование а-ля Шерлок Холмс?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625451
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Я читаю, что вижу, и доверяю этому. Как написано, так я и понимаю. Потом беру, компиляю и получаю, что всё наоборот. Что делать? - Вешать того косноязычного идиота, кто писал пояснения в МСДН так, что всё наоборот выходит, чем там написано?Несмышлёный ты, вот и вся проблема.
Я принципиальный.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625452
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAuser7320, ты подумай над следующим: в чём разница между постфиксной и префиксной операций, если следовать твоей логике?
Т. е. вместо того, чтобы доверять написанному, ты действуешь методом исключения невероятных вариантов? Это программирование или детективное расследование а-ля Шерлок Холмс?Голову включи уже.
Я тебе намекаю, что по твоей логике получится фигня. Значит надо выключить барана и понять, что ты не правильно рассуждаешь.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625457
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Pallarisпропущено...


По-моему, все как раз четко расписано
Когда подсказали, что оператор ++, работающий с ОДНОЙ переменной, задействует ДВЕ переменные, одна из которых как бы скрытая, тогда всё стало ясно.Дак это и написано по ссылке ниже:Pallaris http://msdn.microsoft.com/en-us/library/aa691363(v=vs.71).aspx If x is classified as a variable:
1.x is evaluated to produce the variable.
2.The value of x is saved.
3.The selected operator is invoked with the saved value of x as its argument.
4.The value returned by the operator is stored in the location given by the evaluation of x.
5.The saved value of x becomes the result of the operation.

1. Вычисляем x
2. __x = x;
3/4. x = x+1;
5. return __x;Полярис тебе просто по пунктам разжевал. Ты даже его пункты с пунктами по ссылке по номерам сопоставить не в состоянии?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625466
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
Присваивание происходит после чтения значения переменной. Тебя в институте на первом курсе не учили этому чтоле?
Ты не правильно объясняешь. Палларис правильно объяснил.Я описал постановку задачи. Палларис показал реализацию.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625469
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полярис тупо перевёл с английского на псевдокод, что он выше предлагал ТС сделать самостоятельно.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625471
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но ТС у нас принципиальный, он самостоятельно не хочет
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625478
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныЕвгенийВГде-то в степи,
Не интересно!
Я больше люблю нечто подобное :)
Децкий лепет на лужайке.
Мужыки посерьёзнее развлекаются как-то вот так .
А вам не кажется что переплетение лямбд по фрейду есть нечто иное как

волосы из пизды любимой женщины (с)

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

С начало в пизду, потом по нормальному (с)

вовлек его в небольшой ступор.. ??
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625493
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

Круто! Можно, я к тебе на психоанализ иногда ходить буду?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625753
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут кодил-кодил, и внезапно понял, что мне не нужен override свойства.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625782
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я тут кодил-кодил, и внезапно понял, что мне не нужен override свойства.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625800
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фотка Стародубцевой - лучшее, что было в этой теме
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625830
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весело тут у вас
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625910
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я тут кодил-кодил, и внезапно понял, что мне не нужен override свойства.
Вот тебе и оверлайдинг виртуализации абстракции оверридинга....
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38625996
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВuser7320Я тут кодил-кодил, и внезапно понял, что мне не нужен override свойства.
Вот тебе и оверлайдинг виртуализации абстракции оверридинга....
Да не говори, всё было зря...
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626282
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНесмышлёный ты, вот и вся проблема.
Ария лучше Iron Maiden.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626301
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
есть: ( Ария, Российский Автопром, Говно) нарисуйте транзитивные отношения...
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626316
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
есть: ( Рашен попса, Российский Автопром, Говно) нарисуйте транзитивные отношения...
Полный граф-треугольник устроит?

У Арии лучше музыка - более мелодичная. И у Кипелова лучше вокал, чем у Диккенсона. Плюс тексты песен у Арии более осмысленные.

И это, ты чего-нибудь про ECS слышал? И почему оно с играми связано в первую очередь (кстати, Dungeon Siege 1 рулит, особенно с картой Utraean Peninsula)? Это в этих ваших энтерпрайзах где-нибудь применяется?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626328
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320кстати, Dungeon Siege 1 рулит, особенно с картой Utraean Peninsula
эт что за говно?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626395
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилuser7320кстати, Dungeon Siege 1 рулит, особенно с картой Utraean Peninsula
эт что за говно?
Такого щас не делают - огромная карта на много часов исследований со свободным перемещением и без явных загрузок локаций. Можно мультиплеер до 8 игроков. Прокачка не по уровням, а по использованию скиллов-вещей. И всё на Entity Component System. Энтерпрайзу до этого ещё далеко.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626415
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Изопропилпропущено...

эт что за говно?
Такого щас не делают - огромная карта на много часов исследований со свободным перемещением и без явных загрузок локаций. Можно мультиплеер до 8 игроков. Прокачка не по уровням, а по использованию скиллов-вещей. И всё на Entity Component System. Энтерпрайзу до этого ещё далеко.Кто бы говорил. Где ты, и где Энтерпрайз?

Опять чего-то там покурил?
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626417
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAГде ты, и где Энтерпрайз?

Опять чего-то там покурил?
Обои заблуждаясь, попали в выгребную яму)
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626549
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320У Арии лучше музыка - более мелодичная. И у Кипелова лучше вокал, чем у Диккенсона. Плюс тексты песен у Арии более осмысленные.Будем бить культурой по мракобесию...

YouTube Video
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626553
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда мне было лет 17, тоже Ария нравилась
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626578
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320У Арии лучше музыка - более мелодичная. И у Кипелова лучше вокал, чем у Диккенсона. Плюс тексты песен у Арии более осмысленные.Будем бить культурой по мракобесию...
Вот культура

[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38626900
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Мне не все песни нравятся. Я никогда и не был за то, чтобы "от и до" слушать. Но процентов 30% точно у "Арии" хорошие песни. И, что интересно, с возрастом я, может, песен 10 бы выкинул из нравящихся, но чтобы полностью забить - нет.
Батенька, вам прямая дорога в госдуру)
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38634964
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320И это, ты чего-нибудь про ECS слышал? И почему оно с играми связано в первую очередь (кстати, Dungeon Siege 1 рулит, особенно с картой Utraean Peninsula)? Это в этих ваших энтерпрайзах где-нибудь применяется?
Ахаха, почитал . Подучал, что за шняга? Потом дошёл до последней части , где автор описал EAV . Разница в датах публикации между этими частями - 2 года. Два года морочить людям головы, чтобы потом выдать некую банальщину. И при этом это типа "будущее ММО", передовой край игроразработки. Судя по таким статьям, геймдев это уровень где-то джуниоров-мидлов. Между тем на всяких игровых и около того форумах царит мнение как раз наоборот - игроразработчики почитаются за небожителей, "выжимыющих всё из железа", а всяких энтерпрайз-разработчиков - за распоследних быдлокодеров. В реальности же всё наоборот - геймдев подхватывает азы из энтерпрайза с опозданием лет на 10, а "выжимать всё из железа" всего лишь означает задрачивать ассемблер, чтобы втиснуться в спецификации сраных консолек, железо которых не меняют по 10 лет.
...
Рейтинг: 0 / 0
Переписать только геттер при наследовании
    #38634971
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320user7320И это, ты чего-нибудь про ECS слышал? И почему оно с играми связано в первую очередь (кстати, Dungeon Siege 1 рулит, особенно с картой Utraean Peninsula)? Это в этих ваших энтерпрайзах где-нибудь применяется?
Ахаха, почитал . Подучал, что за шняга? Потом дошёл до последней части , где автор описал EAV . Разница в датах публикации между этими частями - 2 года. Два года морочить людям головы, чтобы потом выдать некую банальщину. И при этом это типа "будущее ММО", передовой край игроразработки. Судя по таким статьям, геймдев это уровень где-то джуниоров-мидлов. Между тем на всяких игровых и около того форумах царит мнение как раз наоборот - игроразработчики почитаются за небожителей, "выжимыющих всё из железа", а всяких энтерпрайз-разработчиков - за распоследних быдлокодеров. В реальности же всё наоборот - геймдев подхватывает азы из энтерпрайза с опозданием лет на 10, а "выжимать всё из железа" всего лишь означает задрачивать ассемблер, чтобы втиснуться в спецификации сраных консолек, железо которых не меняют по 10 лет.
При этом чувак из тех статей по ссылкам ни в одной своей статье не обмолвился ни о .NET, ни о C#, ни о LINQ или EF, ни даже об ORM или EAV. Типа он сам с пацанами это придумал, когда они свою ММОшку писали. И потом пишет "теперь я не работаю в разработчиках ММО, а работаю консультантом для них". Пипец, джуниор наблатыкался азов и пошёл себя продавать консультантом.

Цитата с пятой части статьи

авторIf you know literally nothing about Relational data, RDBMS’s, and/or SQL (which is true of most game programmers

...
Рейтинг: 0 / 0
148 сообщений из 148, показаны все 6 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Переписать только геттер при наследовании
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]