Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 18.03.2018
Сообщений: 22

Модификатор public при явном указании имени интерфейса

04.04.2018, 17:02. Показов 3264. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Есть на просторах интернетов замечательные видеоуроки по C#. И среди уроков есть урок по интерфейсам.
Стал заниматься и пробовать писать код у себя в студии 2017-й. В уроке вроде 12-я используется.
Имеем следующий кусок кода:
Определяем два интерфейса с одинаковым именем метода:
C#
1
2
3
4
5
6
7
8
9
interface IInterface1
    {
        void Method();
    }
 
interface IInterface2
    {
        void Method();
    }
Далее создаем класс, который реализует оба интерфейса и используем объединение реализации одноименных абстрактных членов
C#
1
2
3
4
5
6
7
class ConcreteClass : IInterface1, IInterface2
    {
        public void Method()
        {
            Console.WriteLine("Method - реализация интерфейса IInterface (1-2)");
        }
    }
А далее в видеоуроке автор показывает как он реализует оба метода отдельно, используя явное указание имени интерфейса в имени метода. Выглядит так:
C#
1
2
3
4
5
6
7
8
9
10
11
    class ConcreteClass : IInterface1, IInterface2
    {
        public void IInterface1.Method()
        {
            Console.WriteLine("Method - реализация интерфейса IInterface (1-2)");
        }
        public void IInterface2.Method()
        {
            Console.WriteLine("Method - реализация интерфейса IInterface (1-2)");
        }
    }
И у него все прекрасно работает. А вот у меня студия ругается на модификатор public. "Модификатор "public" недопустим для этого элемента. " Около часа пытался разобраться, но не получилось. Скачал исходники автора к видеокурсу. Открыл его проект и проделал все то же самое, что и он. Все равно моя студия ругается на public. В чем дело? Может я чего-то не понимаю? Подскажите, пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2018, 17:02
Ответы с готовыми решениями:

Приоритет вычисления при явном указании знака умножения
Приветствую. Не холивара ради задам простой вопрос. Чему равно 6:2(2+1)? Специально не использовал редактор формул, чтобы ничего не...

Функция-конвертер работает только при явном указании шаблонных параметров
#include "pch.h" #include <iostream> #include <array> using namespace std; template<typename FromT, typename ToT> struct...

Модификатор доступа при реализации интерфейса
Почему в первом случае допустим модификатор ,а во втором нет

11
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
04.04.2018, 17:21
там public не нужны
0
189 / 166 / 101
Регистрация: 14.03.2018
Сообщений: 426
04.04.2018, 17:22
При явной реализации интерфейса модификатор public недопустим, а метод доступен только по интерфейсной ссылке.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.04.2018, 17:29
Цитата Сообщение от JustDeveloper Посмотреть сообщение
Есть на просторах интернетов замечательные видеоуроки по C#.
Цитата Сообщение от JustDeveloper Посмотреть сообщение
И у него все прекрасно работает.
Ссылочку на мега-урок не дадите?
Подозреваю, что если в видео без перерыва показана компиляция такого кода, то тут вы что-то не так поняли.
0
1 / 1 / 0
Регистрация: 18.03.2018
Сообщений: 22
04.04.2018, 17:42  [ТС]
Каким образом в видеоуроке у него не возникает ошибки?

Добавлено через 58 секунд
Сейчас попробую найти в онлайне, чтобы вам не качать.

Добавлено через 5 минут
Вот в общем, должно в онлайне прям проигрываться https://yadi.sk/i/GxbRZcxV3U6Nmu
На 1:19:40 он показывает этот фокус.

Добавлено через 43 секунды
Он не компилирует этот код, но и компилятор не подчеркивает это как ошибку

Добавлено через 4 минуты
Т.е. как я понял, при явной реализации интерфейса public не пишется, а при использовании класса, его нужно привести к базовому интерфейсному типу при помощи As и метод станет доступен как public?
0
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
04.04.2018, 17:47
Цитата Сообщение от JustDeveloper Посмотреть сообщение
Т.е. как я понял, при явной реализации интерфейса public не пишется, а при использовании класса, его нужно привести к базовому интерфейсному типу при помощи As и метод станет доступен как public?
Да, именно так

C#
1
2
3
4
5
6
7
8
9
        private static void test()
        {
            var class1 = new ConcreteClass() as IInterface1;
            var class2 = new ConcreteClass() as IInterface2;
 
            class1.Method();
            class2.Method();
           
        }
1
1 / 1 / 0
Регистрация: 18.03.2018
Сообщений: 22
04.04.2018, 17:49  [ТС]
Ну а все же почему в видосе все гладко?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.04.2018, 17:49
Лучший ответ Сообщение было отмечено JustDeveloper как решение

Решение

Цитата Сообщение от JustDeveloper Посмотреть сообщение
Каким образом в видеоуроке у него не возникает ошибки?
Там не производится компиляции и выполнения.

Цитата Сообщение от JustDeveloper Посмотреть сообщение
компилятор не подчеркивает это как ошибку
Студия (особенно старая) не всегда в реальном времени показывает ошибки.
Иногда — только после перекомпиляции.
0
04.04.2018, 17:54

Не по теме:

Цитата Сообщение от kolorotur Посмотреть сообщение
Студия (особенно старая) не всегда в реальном времени показывает ошибки.
Иногда — только после перекомпиляции.
А иногда и даже перекомпиляция не помогает =) Такое, конечно, редко происходит, но происходит. Особенно, если код писал какой-то "гений"

0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
04.04.2018, 17:56
Цитата Сообщение от Zodt Посмотреть сообщение
А иногда и даже перекомпиляция не помогает
Сталкивался с таким пару раз, ага.

Цитата Сообщение от Zodt Посмотреть сообщение
Особенно, если код писал какой-то "гений"
Спасибо!!!1
1
1 / 1 / 0
Регистрация: 18.03.2018
Сообщений: 22
04.04.2018, 18:18  [ТС]
Всем спасибо! Понял!
0
05.04.2018, 09:11

Не по теме:

Цитата Сообщение от kolorotur Посмотреть сообщение
Сообщение от Zodt
Особенно, если код писал какой-то "гений"
Спасибо!!!1
Ну ты же понимаешь, что я про совсем "индивидуумов". Без обид :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2018, 09:11
Помогаю со студенческими работами здесь

При добавлении веб сайта (указании имени узла) браузер не хочет открывать страницу
При добавлении веб сайта (указании имени узла) браузер не хочет открывать страницу , хотя без указании имени все работает, через localhost,...

Class в явном объявлении интерфейса не является интерфейсом, ошибка когда вызываю тело метода
class Mob { int Method() { return 0; } } int Mob :: Method()

Ошибка: модификатор члена public должен указываться перед типом и именем члена
Привет! Нужна помощь! Обращаюсь к профессионалам на форуме, т.к. это ваша тема :) Есть вообщем скрипт для игры SuperFightersDeluxe ...

Понизился ТИЦ, при явном повышение позиций.
www.tatuazh.info Вчера ТИЦ упал с 50 до 10. Бэков - 225 (есть хорошие морды + каталоги) По всем ключевым словам сайт в пятерке яндекса....

В программе два интерфейса и нужно чтобы при выводе сообщения в тексбоксе 1 интерфейса, текст сразу отображался
в текстбоксе второго интерфейса, никак не могу понять как это сделать


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru