Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / наследование интерфесов / 20 сообщений из 20, страница 1 из 1
04.08.2010, 16:37
    #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
04.08.2010, 16:57
    #36775646
равшан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наследование интерфесов
ZyK_BotaN,

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

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

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

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

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

можешь главу указать?
...
Рейтинг: 0 / 0
04.08.2010, 19:34
    #36775952
Вот те на
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наследование интерфесов
ZyK_BotaN,
...
Рейтинг: 0 / 0
04.08.2010, 19:39
    #36775959
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наследование интерфесов
он говорит, что я все "правильно" понял.
...
Рейтинг: 0 / 0
05.08.2010, 08:19
    #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
05.08.2010, 11:37
    #36776653
Сам_в_ужасе
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наследование интерфесов
ZyK_BotaNон говорит, что я все "правильно" понял.
А тебе всегда и везде нужны все свойства и методы наследованных классов и интерфейсов? Тогда марш в C++.
...
Рейтинг: 0 / 0
05.08.2010, 12:13
    #36776756
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наследование интерфесов
Сам_в_ужасеZyK_BotaNон говорит, что я все "правильно" понял.
А тебе всегда и везде нужны все свойства и методы наследованных классов и интерфейсов? Тогда марш в C++.

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

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

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

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



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

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

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

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

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

хороший пример - ExpandoObject
...
Рейтинг: 0 / 0
24.12.2014, 10:52
    #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
24.12.2014, 11:08
    #38841422
ZyK_BotaN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наследование интерфесов
некрофилов понабежало
...
Рейтинг: 0 / 0
24.12.2014, 12:09
    #38841526
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
наследование интерфесов
ZyK_BotaN,

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


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