Вопрос

Если у меня есть класс с методом, который я хочу protected а также internal. Отказ Я хочу, чтобы это только полученные классы в сборке смогут называть это.

С protected internal означает protected или internal, Вы должны сделать выбор. Что вы выбираете в этом случае - protected или internal?

Это было полезно?

Решение

Я хочу, чтобы это только полученные классы в сборке смогут называть это.

Ну тогда у вас есть два варианта. Вы можете сделать его защищенным, и всякий раз, когда один из ваших клиентов расширяет ваш класс и называет ваш метод, и вы узнаете об этом, вы можете написать их строго сформулированного письма, говорящего им, чтобы перестать делать это. Или вы можете сделать его внутренним, и делать кодекс отзывы кода вашего коллеги, чтобы убедиться, что они не используют метод, который они не должны использовать.

Я предполагаю, что последний - это дешевле и легче сделать. Я бы сделал это внутренним.

Другие советы

Лично я бы выбрал защищенный. Если подклассы в вашей собственной сборке достаточно хороши, чтобы вызвать метод, почему не подкласс в другой сборке? Возможно, вы можете ревертировать функциональность в отдельном (внутреннем) классе в целом.

Вам действительно нужно объективно подумать о цели метода. Внутренняя доступность почти всегда чувствует себя неправильно для меня. В основном из-за моего опыта, пытающегося вывести из контроля или классов в .NET Framework, где я столкнулся с кирпичной стеной, потому что кто-то решил отметить класс или метод как внутренний. Оригинальный автор никогда не замечал, что не имея доступа к этому методу, сделанным намного сложнее для реализации подкласса.

РЕДАКТИРОВАТЬ

Чтобы уточнить, внутренняя доступность для класса очень полезна, и я не подразумевал внутреннее в целом плохо. Моя точка зрения была то, что внутренние методы на общественном классе, кажется, не так. Правильно разработанный базовый класс не должен дать несправедливое преимущество для полученных классов в той же сборке.

Я верю, что правильный выбор internal. Отказ Таким образом, вы можете защитить людей за пределами вашей сборки от призыва этого метода, и это только оставляет вас осторожным и вызывать только этот метод от производных классов. Легче быть осторожным в сборке, которую вы пишете, чем надежда, другие люди будут осторожны, когда они его используют.

Это такое причудливое решение сделать protected internal иметь в виду protected ИЛИ internal. Отказ Для этого точного случая я бы использовал internal. Отказ Причина в том, что если инкапсуляция сломана, я бы предпочел бы быть мной, скорее, чтобы кто-то не под моим контролем.

Я думаю, что ответ варьируется в зависимости от ваших потребностей. Если бы я был тобой, я бы сделал что-то подобное:

    public class YourClass
    {
       protected class InnerClass
       {
           internal void YourMethod()
           {
               // Your Code
           }
       }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top