Что Вы выбираете, защищенный или внутренний?

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

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

8
задан brickner 20 May 2010 в 04:53
поделиться

5 ответов

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

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

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

5
ответ дан 5 December 2019 в 11:22
поделиться

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

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

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

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

6
ответ дан 5 December 2019 в 11:22
поделиться

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

1
ответ дан 5 December 2019 в 11:22
поделиться

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

3
ответ дан 5 December 2019 в 11:22
поделиться

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

    public class YourClass
    {
       protected class InnerClass
       {
           internal void YourMethod()
           {
               // Your Code
           }
       }
    }
0
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: