2015-02-26 2 views
-8

Доступ к защищенной переменной можно получить из частного класса. Да, что произойдет и как это работает?Доступ к защищенной переменной из частного класса

private class classname{ 
    protected int variable_name = 5; 
    private void method_name(){ 

     response.write(variable_name); 

    } 
} 

это было предложено в моем интервью

+1

Класс не может быть закрытым, если только он не является внутренним классом. –

+2

Почему бы вам не попробовать? Вы уверены, что знаете, что означает 'protected' и' private'? Вы что-нибудь читали в своей документации? –

+0

Из [документации] (https://msdn.microsoft.com/en-us/library/bcd5672a.aspx): «Защищенный член доступен в пределах своего класса и экземпляров производного класса» –

ответ

2

Да, это возможно, и это означает, что точно так же, как обычно:

public class Container 
{ 
    private class Foo 
    { 
     protected int field; 

     private class FurtherNested 
     { 
      // Valid: a nested class has access to all the members 
      // of its containing class 
      void CheckAccess(Foo foo) 
      { 
       int x = foo.field; 
      } 
     } 
    } 

    private class Bar : Foo 
    { 
     void CheckAccess(Foo foo) 
     { 
      // Invalid - access to a protected member 
      // must be through a reference of the accessing 
      // type (or one derived from it). See 
      // https://msdn.microsoft.com/en-us/library/bcd5672a.aspx 
      int x = foo.field; 
     } 

     void CheckAccess(Bar bar) 
     { 
      // Valid 
      int x = bar.field; 
     } 
    } 

    private class Baz 
    { 
     void CheckAccess(Foo foo) 
     { 
      // Invalid: this code isn't even in a class derived 
      // from Foo 
      int x = foo.field; 
     } 
    } 
} 

Тем не менее, это относительно необычно иметь любой тип, производный от частный (и, следовательно, вложенный) тип.

+0

Спасибо за пояснение Джон, я не знал о том, что «Недопустимый - доступ к защищенному члену должен быть через ссылку типа доступа (или одного, полученного от него)». –

+0

@JenishRabadiya: Это просто нормальная часть значения защищенного модификатора. Будет добавлена ​​ссылка MSDN на код, как комментарий. –

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