powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / наследование интерфесов
20 сообщений из 20, страница 1 из 1
наследование интерфесов
    #36775600
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Встретился в книге пример на языке C#:

Код: plaintext
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.
        interface IClientTest
        {
            bool Test(Client client);
            void Report(Client client);
        }
        
        
        class CoefficientTest : IClientTest
        {
            readonly double income, years, min;
            public CoefficientTest(double income, double years, double min)
            {
                this.income = income; this.years = years; this.min = min;
            }
            public void PrintInfo()
            {
                Console.WriteLine("income*{0}+years*{1} >= {2}", income, years, min);
            }
            bool IClientTest.Test(Client cl)
            {
                return cl.Income * qIncome + cl.YearsInJob * qYrs < min;
            }
            void IClientTest.Report(Client cl)
            {
                Console.WriteLine("Coefficient {0} is less than {1}.",
                cl.Income * income + cl.YearsInJob * years, min);
            }
        }

выражение:
Код: plaintext
test is  IClientTest
возвращает true

но, при этом без приведения объекта test к интерфейсу
IClientTest, методы интерфейса недоступны.

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

это называется Explicit Interface Implementation
...
Рейтинг: 0 / 0
наследование интерфесов
    #36775653
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если класс реализует 3 интерфейса и у всех определен 1 метод DoWork, ваши действия ?
...
Рейтинг: 0 / 0
наследование интерфесов
    #36775663
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN
выражение:
Код: plaintext
test is  IClientTest
возвращает true

меня особенно удивляет это поведение.
как по мне, дак false являлся бы правильным ответом.
...
Рейтинг: 0 / 0
наследование интерфесов
    #36775668
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stimpiесли класс реализует 3 интерфейса и у всех определен 1 метод DoWork, ваши действия ?

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

дядя Рихтер говорит что это херь
так что не парься
...
Рейтинг: 0 / 0
наследование интерфесов
    #36775930
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот те наZyK_BotaN,

дядя Рихтер говорит что это херь
так что не парься

можешь главу указать?
...
Рейтинг: 0 / 0
наследование интерфесов
    #36775952
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,
...
Рейтинг: 0 / 0
наследование интерфесов
    #36775959
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он говорит, что я все "правильно" понял.
...
Рейтинг: 0 / 0
наследование интерфесов
    #36776290
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
выражение:

test is  IClientTest

возвращает true

но, при этом без приведения объекта test к интерфейсу
IClientTest, методы интерфейса недоступны.
зачем это сделано?
где можно использовать?

Если я не ошибаюсь оператор
Код: plaintext
 is 
был в C# начиная с версии 1.0
Во второй версии языка появился оператор приведения типа
Код: plaintext
 as 
.

Так что я им и пользуюсь, чего и Вам желаю.
...
Рейтинг: 0 / 0
наследование интерфесов
    #36776653
Сам_в_ужасе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNон говорит, что я все "правильно" понял.
А тебе всегда и везде нужны все свойства и методы наследованных классов и интерфейсов? Тогда марш в C++.
...
Рейтинг: 0 / 0
наследование интерфесов
    #36776756
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам_в_ужасеZyK_BotaNон говорит, что я все "правильно" понял.
А тебе всегда и везде нужны все свойства и методы наследованных классов и интерфейсов? Тогда марш в C++.

мое интуитивное понимания принципов наследования говорит о том что всегда и везде .
интерфейс реализуют что-бы гарантировать что все методы у данного класса есть.
а Explicit Interface Implementation - это костыль, решающий колизии. может и полезный костыль, но костыль.
...
Рейтинг: 0 / 0
наследование интерфесов
    #36776774
Сам_в_ужасе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNвсегда и везде

Сам_в_ужасеТогда марш в C++.
...
Рейтинг: 0 / 0
наследование интерфесов
    #36776796
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам_в_ужасеZyK_BotaNвсегда и везде

Сам_в_ужасеТогда марш в C++.

почему не жава или делфи?
а то звучит, как "пошел на ...".
...
Рейтинг: 0 / 0
наследование интерфесов
    #36777627
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNСам_в_ужасеТогда марш в C++.
Там еще хуже - множественное наследование - при наследовании от двух классов, у которых есть общий предок, и если в наследниках метод предка переопределен, и вы его из общего наследника будете вызывать - то вообще результат непредсказуем.



И костыля нету....
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
наследование интерфесов
    #38841207
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот те наZyK_BotaN,

дядя Рихтер говорит что это херь
так что не парься
Мне вот интересно, дядя Рихтер это говорит в том смысле, что "это неизбежная необходимость", или что "эти придурки из Майкрософт опять всё налажали!" (при этом облизывая свой любимый (в тайне) Линукс и набирая всё это в своём любимом Маке)? Вот тут выше говорят, что в С++ даже обходного путя для этого нет, но пример дяди Рихтера, который бы вообще на чём свет стоит костерил бы С++ и говорил, что вот в С# де хотя бы обходной путь сделали, не приводят.

Ну и как эта ситуация обойдена в других языках? А то ведь пример дяди Рихтера можно воспринимать и как "ах, как плохо, что на Землю иногда падают астероиды и сносят всё живое" - ну т. е. вроде как плохо, но вроде как и лучшего ничего нет.
...
Рейтинг: 0 / 0
наследование интерфесов
    #38841300
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42,

это не более чем отношение Рихтера к явной реализации интерфейса

явная реализация интерфейса позволяет срыть потроха реализации и обращаться к ним только при явной необходимости

хороший пример - ExpandoObject
...
Рейтинг: 0 / 0
наследование интерфесов
    #38841391
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNвыражение:
Код: c#
1.
test is  IClientTest


возвращает true

но, при этом без приведения объекта test к интерфейсу
IClientTest, методы интерфейса недоступны.Ископаемый срач ни о чем.

Смысл этого выражения — поддерживает ли объект test интерфейс IClientTest.
Да, поддерживает. Зачем тут бабушку Рихтера лохматитить?

ZyK_BotaNно, при этом без приведения объекта test к интерфейсу
IClientTest, методы интерфейса недоступны."Доступно" всё. Операции "приведения типов" применительно к интерфейсам вообще не существует. Это просто подсказка компилятору, какую функцию по порядку дернуть из таблицы экспорта той библиотеки, в которой функция обитает:
авторКогда из набора объектных файлов линкуется один .so/.dll/.a/.exe, наши таблицы экспорта из всех объектных файлов тупо сливаются в одну. 14006886
...
Рейтинг: 0 / 0
наследование интерфесов
    #38841422
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
некрофилов понабежало
...
Рейтинг: 0 / 0
наследование интерфесов
    #38841526
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

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


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