c# интерфейсы public и explicit: когда что лучше?
interface Aaa
{
void aaa();
}
class Bbb : Aaa
{
public void aaa() { } // public
}
class Ccc : Aaa
{
void Aaa.aaa() { } // explicitly
}
Функция aaa() по разному объявлена в Bbb и в Ccc.
Мне больше нравится Ccc. Но все же что лучше и в каких ситуациях?
да я тоже заметил что второй случай даже из самого же класса не вызовешь.
Но не пойму: зачем эти ограничения (во втором случае)? Какой плюс от этого и в какой ситуации?
второй случай даже из самого же класса не вызовешь.
Через кастинг вызывается.
зачем эти ограничения (во втором случае)?
Вообще то лучше спросить - а нафига енто вообще нужно?
Допустим есть два интерфейса и в каждом есть фунция "Делай", да и еще базовый класс имеет эту функцию. Наш класс наследуем от этих двух интерфейсов и получаем несколько вариантов имплементации фунции "Делай".
Можно сделать одну, а можно две или три.
Иначе разделить бы все ну никак не получилось бы. Ну и различных "удобных" примеров использования можно найти. Типа "скрыть" один из методов интерефейса.
"удобные" не зря в кавычках. СиШарп как я понял, и за что его уважаю, как раз пытается исключить неоднозначности и ошибки самим языком (с сиплюсами сравниваю), а вот возможность такой двойной имплементации одной и той же функции - кажись путь к ошибкам (я уже раз напоролся, может по неопытности).
а вот возможность такой двойной имплементации одной и той же функции - кажись путь к ошибкам
Плохой дизайн всегда сделать проще чем хороший. Только замечаешь это не сразу.
Просто без возможности подобной имплементации было бы гораздо хуже.
Вот еще маленький примерчик для ModelViewPresenter. Допустим, для закрытия формы(View) есть фунция Shutdown у презентера/контроллера. Реализуй мы ее как обычно "открытой", имеем большой сооблазн вызвать ее напрямую из формы Shutdown(). А так делаем "закрытой" IView.Shutdown() {} и чтобы вызвать из формы нужно "извратиться" а через презентер или интерфейc View-a - но проблемо (presenter.Shutdown(), view.Shutdown()). В подсказках Shutdown тоже не будет. Какое никакое - а удобство.
кажись путь к ошибкам
-----
немножко есть.
Но выигрыш - больше.
Была в одном проекте иерархия - для каждого уровня свой класс.
Потом шеф решил все это коллапсировать... работать оно, разумеется, перестало....
Но вот разгребали именно имплементацией множества интерфейсов...