Сделайте ваше Tags
свойство readonly
, тогда его можно инициализировать только в конструкторе:
public readonly TagClass Tags;
Ссылка на объект, сохраненная в Tags
, не может быть изменена позже, и этот код:
MyEditorClass editor = new MyEditorClass(editorBox);
editor.Tags = new MyEditorClass.TagClass();
не скомпилируется.
Или, вторая возможность, даже лучше - предоставьте только публичный метод получения для вашего свойства Tags
и держите экземпляр в секрете внутри вашего класса MyEditorClass
, как в примере ниже.
Кстати, это не имеет ничего общего с вложенными классами. Довольно странно иметь публичный класс внутри публичного класса.
EDIT:
Чтобы иметь структуру, аналогичную ComboBox
, чтобы TagClass
имел доступ к редактору, вы можете передать экземпляр редактора внутреннему конструктору TagClass
. Конструктор является внутренним и не позволяет внешнему коду использовать TagClass
напрямую.
public class MyEditorClass
{
private readonly RichTextBox editor;
private readonly TagClass tags;
public TagClass Tags
{
get
{
return tags;
}
}
public MyEditorClass(RichTextBox editorBox)
{
editor = editorBox;
tags = new TagClass(editorBox);
}
}
public class TagClass
{
private RichTextBox _editor;
internal TagClass(RichTextBox editor)
{
_editor = editor;
}
public void InsertTag1()
{
_editor.Text += "Test tag 1";
}
}
И теперь это будет работать:
MyEditorClass editor = new MyEditorClass(editorBox);
editor.Tags.InsertTag1();