Я создал одно приложение ConsoleApplication, чтобы понимать спецификаторы доступа.
Ниже мой код для внутреннего, я могу получить доступ к этому классу извне Assembly.
namespace Assembly_1 //This is first assembly.
{
public class Base
{
//internal class
internal class B
{
public static void fnB()
{
Console.WriteLine("fnB");
}
}
}
}
namespace Assembly_2 //This is second assembly.
{
public class Derived : Assembly_1.Base
{
public class D
{
public void fnD()
{
B.fnB();//how can I access this class?
}
}
}
}
И вот где я получаю к нему доступ.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly_2.Derived.D d = new Assembly_2.Derived.D();
d.fnD();
}
}
}
Мой вопрос
Прямо сейчас я могу получить доступ к классу B и его методам, таким как fnB () в Derived.
Все нормально работает. но как?
Как я могу получить доступ к B-классу вне Assembly_1?
internal
член, к которому осуществляется доступ вpublic
члене, должен превратить этот публичный член во внутренний? Почему? Как? Ожидаете ли вы также, что, пока есть открытый член, имеющий доступ к закрытому члену, это сделает другой класс неспособным использовать открытый член? - person Luaan   schedule 20.04.2017namespace Assembly_1
действительно определен в другом проекте? Я совершенно уверен, что это не так. Он находится в том же проекте (сборке), что иnamespace Assembly_2
- person Ofir Winegarten   schedule 20.04.2017B.fnB
в консольном проекте, только кD.fnD
.D.fnD
является общедоступным, и не имеет значения, что он вызывает внутри. Было бы совершенно бесполезно, если бы это было так. - person Luaan   schedule 20.04.2017