Классы и модификаторы доступа в.net
У меня есть 3 вопроса относительно Oops Concepts
:
Что является модификаторами доступа по умолчанию для класса в пространстве имен, я попытался применить модификаторы к классу. Компилятор.net выдал ошибку, сказав, что `элементы, определенные в пространстве имен, не могут быть объявлены явно, как частные, защищенные или защищенные друзья. ниже мой код.
В чем разница между
protected internal and internal
поскольку внутренние могут использоваться в сборке, а защищенные внутренние могут использоваться в том же классе, унаследованном классе или других классах в той же сборке. и в основном то, что именно здесь подразумевается под сборкой.- Если есть 2 класса
Class1 and Class2
Class1 имеетMethod1()
а такжеClass2
имеетMethod2()
, если оба находятся в цепочке наследования, тоClass1 c = new Class2();
разрешить доступMethod2();
потому что здесь новый объектClass2
тогда почему.net позволяетMethod1();
Я попробовал это.
3 ответа
1) Внутренний
2) Либо производный класс (возможно, в другой сборке), либо любой код в той же сборке может получить доступ
3) У вас есть ссылка на class1
который не имеет method2
- вам нужна ссылка на class2
уметь звонить method2
,
Что касается вопроса 2:
Защищенный означает, что все производные классы могут получить доступ к методу, внутренний означает, что все классы в этой сборке могут получить доступ к методу. защищенный внутренний является комбинацией обоих.
Вот очень интересное сообщение в блоге о защищенных внутренних методах:
http://blogs.msdn.com/b/ericlippert/archive/2010/03/25/knights-knaves-protected-and-internal.aspx
1) Существует, потому что вам нужно объявить этот класс как защищенный или любой более высокий уровень доступа, например, public
3) Подклассы наследуют члены суперклассов (в данном случае метод). Обратное не может работать, хотя вы назначаете class2 для class1.