2013-02-26 3 views
1

Сегодня я читал через явный интерфейс реализации. Я пришел к выводу, что одно из них - это ограничение доступа клиентов к методам интерфейса через объект класса.абстрактный способ класса для явного интерфейса реализации

Можно ли создать такую ​​же функцию с помощью абстрактного класса? Например, ограничение доступа к методам через объект производного класса?

+0

вы имеете в виду, что вы хотите особенность, чтобы получить доступ только абстрактный класс 'методы через абстрактный класс? – Default

+0

да .. точно .. –

+0

могу я спросить почему? какой сценарий вы хотите решить? – Default

ответ

2

Вы можете объявить метод как protected - тогда он доступен только для этого класса и подклассов (это не для API public). Тем не менее, если вы хотите, вы не можете override это сделать public в производном классе - вы должны были бы new это:

abstract class Foo { 
    protected void Bar() {...} 
} 
class SuperFoo : Foo { 
    new public void Bar() { base.Bar(); } // <==== ugly 
} 
+0

Я хочу получить доступ к абстрактным методам только через ссылочную переменную абстрактного класса. Не через ссылочную переменную производного класса, хотя производный класс может иметь реализацию метода. Надеюсь, теперь я ясно. –

+0

@ DeepakRaj абстрактные методы могут использоваться как можно дольше, пока они общедоступны; поэтому, если 'Foo' имел' public abstract void SomeMethod(); 'вы можете делать' Foo foo = new SuperFoo(); foo.SomeMethod(); ' –

+0

благодарит Марка за объяснение. В том же примере, если у нас есть 'SuperFoo sfoo = new SuperFoo();', есть ли способ ограничить выполнение 'sfoo.SomeMethod();' **? ** –

Смежные вопросы