Как ограничить разделение на подклассы общественности abstact класс к типам в том же блоке и таким образом позволить защищенным участникам, введенным внутренним типам

Я посмотрел на использование ch некоторое время назад, чтобы видеть, мог ли я использовать его для тестирования методом "черного ящика" DLLs, за который я ответственен. К сожалению, я не мог вполне выяснить, как заставить его загружать и выполнять функции от DLLs. С другой стороны я не был то, что мотивированный и может быть путь.

5
задан Kenneth Baltrinic 13 November 2009 в 13:41
поделиться

2 ответа

CLR предоставляет доступность FamilyAndAssembly, которая будет делать то, что вы хотите, но в C # нет синтаксиса для ее использования.

Обходной путь - сделать поле переменной внутренним и вам придется доверять коду в вашей сборке, чтобы не получить к нему несоответствующий доступ.

Вы также можете сделать конструктор PublicBaseClass внутренним, чтобы только ваша сборка могла его создать. Таким образом, только ваши классы могут наследовать от него (даже если сам класс является общедоступным)

5
ответ дан 14 December 2019 в 19:17
поделиться

Самый простой способ справиться с этим - использовать общедоступные интерфейсы и частные классы. Если вы проводите рефакторинг существующего кода, это не всегда вариант. Один из простых способов облегчить это преобразование - использовать открытый абстрактный класс вместо интерфейса и предоставить статический фабричный метод.

Пример:

public abstract class MyClass
{
    public static MyClass New()
    { return new InternalMyClass(); }
}

class InternalMyClass : MyClass
{ }
0
ответ дан 14 December 2019 в 19:17
поделиться
Другие вопросы по тегам:

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