Сокрытие производного метода класса? - PullRequest
0 голосов
/ 03 сентября 2010

Можно ли скрыть открытый метод производного класса, чтобы он не был доступен в функции Main () в C #. Мы не можем изменить методы доступа к производному методу класса.

public class A
{
    public void Add()
    {
    }    
}       

public class B : A 
{
    public void Multiply()
    {
    }        
}

В методе main () в C #

B b = new B();
b.mulitply(); // should give compile time error... Like method not founded.

Есть ли способ, которым мы можем это сделать.

Ответы [ 4 ]

5 голосов
/ 03 сентября 2010

Абсолютно нет. Это публичный метод публичного класса. Если вы не можете использовать его, он не должен быть публичным.

(Кстати, я не вижу, насколько уместен тот факт, что он происходит от A.)

1 голос
/ 03 сентября 2010

Этот запрос не имеет никакого смысла.Класс B объявляет метод Multiply.Почему этот метод когда-либо будет скрыт?От кого скрыто?

0 голосов
/ 03 сентября 2010

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

Вы могли бы либо наследовать конфиденциально?(не имеет смысла) или объявил член закрытым или защищенным, поэтому производный класс не наследует его.

0 голосов
/ 03 сентября 2010

Почему бы вам просто не сделать метод закрытым?

public class B: A
{
  private void Multiply()
  {
  }
}

Если вы абсолютно не можете изменить B, то единственное, о чем я могу подумать, это создать полный класс адаптера.

public C
{
  private B instance;

  private void Multiply(){}

  public void Add()
  {
    B.Add();
  }
}

Это заставит вас «копировать» все методы в B, кроме того, который вам нужен.

Если вам АБСОЛЮТНО нужен класс «B», вам придется повернуть двигательс отражателем и измените открытое поле на частное или защищенное.

...