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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2018, 13:50   #31
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Примеры из учебника с Class1, Class2 и прочими FooBar это не практика.
Было бы чего практиковать.
Мaкс вне форума Ответить с цитированием
Старый 07.07.2018, 13:51   #32
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от shturman1387 Посмотреть сообщение
В универе я например долго разбирался с указателями в С++, но по форумам не бегал с вопросом - зачем нужны указатели.
Ну уж извините, где ещё мне задавать вопрос? Нигде! Я же сам учусь.
Мaкс вне форума Ответить с цитированием
Старый 07.07.2018, 13:57   #33
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Так:
ЛоггерВФайл : ЛоггерВБазу
?
Вы гадаете или утверждаете? Если утверждаете, то объясните написанное. Как это по вашему логически работает?
Baburek вне форума Ответить с цитированием
Старый 07.07.2018, 14:21   #34
shturman1387
Форумчанин
 
Аватар для shturman1387
 
Регистрация: 12.06.2012
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Ну уж извините, где ещё мне задавать вопрос? Нигде! Я же сам учусь.
Да вас никто и ни в чем не обвинят. Если учитесь - это хорошо.
Попробуйте разобрать этот пример. Не могу сказать что он идеальный. Но как проще объяснить я не знаю.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExampleForMax
{
    class Program
    {
        static void Main(string[] args)
        {
            ILogger consoleLogger = new ConsoleLogger();

            ILogger fileLogger = new FileLogger();

            Report report = new Report(consoleLogger);
            report.Save();
        }
    }

    interface ILogger
    {
        void Log();
    }

    class DbLogger : ILogger
    {
        public void Log()
        {
            Console.WriteLine("Db");
        }
    }

    class ConsoleLogger : ILogger
    {
        public void Log()
        {
            Console.WriteLine("Console");
        }
    }

    class FileLogger : ILogger
    {
        public void Log()
        {
            Console.WriteLine("File");
        }
    }

    class Report
    {
        private ILogger _logger;

        public Report(ILogger logger)
        {
            _logger = logger;
        }

        public void Save()
        {
            _logger.Log();
        }
    }
}
shturman1387 вне форума Ответить с цитированием
Старый 08.07.2018, 15:53   #35
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Ох, ну не знаю. На логгировании я бы тоже, наверное, не поняла.

Интерфейсы нужны для вычленения общих признаков. Например, издавать звуки умеет человек и собака. Вы обоим классам пишите метод ИздаватьЗвуки - и радуетесь. Представьте, что 100 человек и 100 собак собрались в одной комнате и хотят "поговорить".

Какое первое решение? Создать массив люди и массив собаки, прокрутить каждый в цикле и вызвать ИздаватьЗвуки у каждого элемента. А теперь представим, что у нас есть еще попугайчики, кролики, кошки, бегемоты, слонопотамы. Это ж сколько придется делать массивов, чтобы у всех повызывать функцию ИздаватьЗвуки? А если каждые два дня заказчик добавляет еще одного животного, вам придется каждые два дня переписывать код, добавляя массив?

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

Но приходит заказчик и говорит, хочу, мол, чтобы наши объекты пошли на стадион и попрыгали. Там вы уже сразу понимаете, что нужен один массив для всех. Только беда какая: прыгать наши зверушки не умеют. Вы такой: "Да не вопрос!" Создаете класс Прыгающие, описываете там функцию Прыгать и намереваетесь унаследовать от него наших кошек-собак, а Шарп вам говорит: "Нифига, друг, у меня нет множественного наследования, а твои зверушки уже унаследованы от класса ИздающиеЗвуки! Зато я могу имплементировать множество интерфейсов".

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

Последний раз редактировалось ACE Valery; 08.07.2018 в 15:55.
ACE Valery вне форума Ответить с цитированием
Старый 08.07.2018, 17:12   #36
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Baburek Посмотреть сообщение
Вы гадаете или утверждаете?
Гадаю.

Что в примере значит параметр объект consoleLogger? Просто я это в первый раз вижу.

Последний раз редактировалось Мaкс; 08.07.2018 в 17:36.
Мaкс вне форума Ответить с цитированием
Старый 08.07.2018, 17:13   #37
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Скрин забыл
Изображения
Тип файла: jpg Screen Shot 08.07.2018 at 21.11.jpg (76.5 Кб, 146 просмотров)
Мaкс вне форума Ответить с цитированием
Старый 08.07.2018, 17:16   #38
shturman1387
Форумчанин
 
Аватар для shturman1387
 
Регистрация: 12.06.2012
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Что в примере значит параметр объект consoleLogger? Просто я это в первый раз вижу.
На вашем скрине обратите внимание на строчку 54
shturman1387 вне форума Ответить с цитированием
Старый 08.07.2018, 17:17   #39
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от shturman1387 Посмотреть сообщение
На вашем скрине обратите внимание на строчку 54
Это я сразу заметил. Но что даёт это? Значение?
Мaкс вне форума Ответить с цитированием
Старый 08.07.2018, 17:19   #40
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Упс, не обратил внимание на метод, извините за беспокойство.
Мaкс вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько дней уже не могу разобраться с кодом... timedo HTML и CSS 1 25.02.2013 09:49
уже несколько дней не могу решить две задачки badim4k Паскаль, Turbo Pascal, PascalABC.NET 0 16.12.2011 16:41
ДУЗЬЯ! НУЖНА ПОМОЩЬ ТЕХ, ХТО УЖЕ СТАЛКИВАЛСЯ С ЭТИМ! matfey Компьютерное железо 4 19.10.2009 19:09
Помогите школьнику kvx Microsoft Office Excel 6 20.09.2009 21:09