Представление внутреннего класса как публичного свойства
В библиотеке классов, над которой я работаю, у меня был класс с большим количеством свойств, поэтому я изменил его, чтобы он состоял из нескольких меньших, внутренних классов. Однако теперь, когда я пометил эти классы как внутренние , код не будет компилироваться, когда я представлю их в качестве общих свойств в исходном классе. Например:
public class TheOriginalClass
{
public MyInternalClass InternalClassProperty { get; set; }
}
// It doesn't make sense to use this by itself
internal class MyInternalClass
{
public string InterestingProperty { get; set; }
}
В идеале, я хотел бы инкапсулировать эти вспомогательные классы в сборке, поскольку для них нет смысла создавать экземпляры где-либо еще.
Есть ли способ достичь этого?3 ответа:
Если вы открываете содержимое класса внешнему миру, отметьте его как
public, чтобы позже вы знали, что класс является общедоступным, поэтому вы не будете так часто менять открытый интерфейс. Нет смысла отмечать егоinternal, если он не будет таким внутренним.Если вы действительно этого хотите, используйте отражение с вызывающей сборкой и флагом привязки
BindingFlags.NonPublicпри извлечении классов (и их конструкторов) в сборке.
Не имеет смысла иметь класс
internalв качестве статического типа свойстваpublic. Потребитель этого свойства в другой сборке не смог бы сделать с ним ничего полезного.Возможно, вы хотели иметь вспомогательный класс
publicс конструкторомinternal, чтобы предотвратить его создание другими.Или сделать тип свойства открытым интерфейсом и реализовать этот интерфейс во внутреннем классе.