Представление внутреннего класса как публичного свойства
В библиотеке классов, над которой я работаю, у меня был класс с большим количеством свойств, поэтому я изменил его, чтобы он состоял из нескольких меньших, внутренних классов. Однако теперь, когда я пометил эти классы как внутренние , код не будет компилироваться, когда я представлю их в качестве общих свойств в исходном классе. Например:
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
, чтобы предотвратить его создание другими.Или сделать тип свойства открытым интерфейсом и реализовать этот интерфейс во внутреннем классе.