module Program
{
internal Foo(_ : InternalEnum) : void// <=== Error: Method `Foo' is more accessible than `InternalEnum'
{
}
}
Если у Foo область видимости private — то скомпилируется (это правильно). Если public или protected — то будет такая же ошибка компиляции (это тоже правильно). В случае internal я ожидаю, что тоже все скомпилируется, как это происходит в c#.
Здравствуйте, nikov, Вы писали:
M>> В случае internal я ожидаю, что тоже все скомпилируется, как это происходит в c#.
N>В C# это ошибка дизайна.
Неожиданно, однако...
А в чем она заключается? И как быть, если из какой-то конкретной сборки хочется получить доступ к internal другой сборки? Я использую такой подход для юнит-тестов. Видимо, надо делать как-то по-другому?
Mumitroller
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
Re[3]: Неправильно определяется область видимости для intern
Здравствуйте, Mumitroller, Вы писали:
M>>> В случае internal я ожидаю, что тоже все скомпилируется, как это происходит в c#.
N>>В C# это ошибка дизайна.
M>Неожиданно, однако...
M>А в чем она заключается?
C# разрешает иметь нетранзитивное множество атрибутов InternalVisibleTo, что приводит ко всяким странным эффектам (например, возможность существования класса, который не видит базовый класс своего базового класса, или возможность существования метода, который сам видим, а тип его возвращаемого значения — нет), которые чрезвычайно трудно учесть, и которые, соответственно, стали причиной многих багов при обработке таких ситуаций в компиляторе.
Re[4]: Неправильно определяется область видимости для intern
Здравствуйте, nikov, Вы писали:
N>>>В C# это ошибка дизайна.
M>>Неожиданно, однако... M>>А в чем она заключается?
N>C# разрешает иметь нетранзитивное множество атрибутов InternalVisibleTo, что приводит ко всяким странным эффектам (например, возможность существования класса, который не видит базовый класс своего базового класса, или возможность существования метода, который сам видим, а тип его возвращаемого значения — нет), которые чрезвычайно трудно учесть, и которые, соответственно, стали причиной многих багов при обработке таких ситуаций в компиляторе.
Но, ведь какая удобная ошибка! Добавляешь один атрибут к сборке и получаешь готовый white box для тестирования. Раз это объявлено ошибкой, значит должен быть какой-то "правильный" способ получить тот же результат? Только я не могу его найти. Может быть кто-то подскажет?