2014-12-02 2 views
1
class Program 
{ 
    class TestA 
    { 
     protected string protectedStringA; 
    } 

    class TestB : TestA 
    { 
     string StringTestB() 
     { 
      return protectedStringA; 
     } 
    } 

    class TestC : TestB 
    { 
     string StringTestC() 
     { 
      return protectedStringA; 
     } 
    } 


    static void Main(string[] args) 
    { 


    } 
} 

Согласно this ссылке определение защищен является «Тип или элемент может быть доступны только с помощью кода в том же класса или структуры, или в классе, который является производным от этот класс ". Здесь Class TestC не является производным от TestA. Но protectedStringA по-прежнему доступен. Каково точное значение класса , который получен из этого класса?защищенный доступ модификатор смысл, полученный

+4

TestC получен из TestB, который получен из TestA, TestC является TestA. –

ответ

2

С B наследует A's (общественные и защищенные) члены, C наследует их всех от B. Это точка наследования.

Каково точное значение класса, полученного из этого класса?

Это означает, что производный класс может получить доступ к защищенным членам его базового класса. В этом случае C на самом деле наследуется от A косвенно. Таким образом, он имеет доступ ко всем public и protected - членам его базовых классов.

+0

Как и мудрый, член ** protected ** может быть доступен любым производным классам в цепочке! Это почти похоже на уровень доступа ** внутренний **. –

+0

@JohnSmith Нет, это не так. «Внутренний» модификатор доступа предоставляет доступ к любому файлу в той же сборке. Мне не нужно быть в одной сборке, чтобы получить из класса 'public', и мне не нужно выводить из класса, чтобы быть в той же сборке. –

+0

Как мудрый, член ** protected ** может быть доступен любым производным классам в цепочке! Это почти похоже на уровень доступа ** внутренний **. Дайте мне один пример, где этот метод ** protected ** не может быть доступен унаследованными классами в этой цепочке наследования. –

2

Несмотря на то, что TestC не является непосредственно производным от TestA, это косвенно, потому что TestB наследует TestA. Надеюсь, это поможет.

2

Давайте положить его на другие слова:

«Любой класс может получить доступ к любым защищенным членам своих предков».

Если TypeA является предком TypeB и TypeB является предком TypeC, чем TypeA является предком TypeC.

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