0

我正在尝试获得与组合框相同的功能,例如 combobox1.Items.Add() // editor.Tags.Tags1()

像这样:

class Main()
{
    // The editor is passed into the editor class, that allows the editor class to update the editor.
    MyEditorClass editor = new MyEditorClass(editorBox);
    editor.Tags.InsertTag1();

    // Now i don't want people to do this
    // MyEditorClass.TagClass tags = new MyEditorClass.TagClass();
}

原因是标签类调用了传递给 MyEditorClass 的 editorBox,如果您在没有该编辑器的情况下创建标签类,它将无法工作。

我的 MyEditorClass 看起来像这样:

public class MyEditorClass
{
    static RichTextBox editor;
    public TagClass Tags;

    public MyEditorClass(RichTextBox editorBox)
    {
        editor = editorBox;
        Tags = new TagClass();
    }



    public class TagClass
    {
        public void InsertTag1()
        {
            editor.Text += "Test tag 1";
        }
    }
}

我试图使 TagClass 静态,但没有奏效。组合框的结构如何?由于您不能使用 Combobox.Items 但如果您声明一个,则可以在您声明的那个上使用 Combobox.Items。

4

2 回答 2

1

制作你的Tags属性readonly,然后它只能在构造函数中初始化:

public readonly TagClass Tags;

存储在其中的对象引用Tags不能在以后更改,并且该代码:

MyEditorClass editor = new MyEditorClass(editorBox);
editor.Tags = new MyEditorClass.TagClass();

不会编译。

或者,第二种可能性,甚至更好 - 只为您的属性公开公共 getter,Tags并将实例私下保存在您的MyEditorClass类中,如下例所示。

顺便说一句,它不必对嵌套类做任何事情。在公共类中拥有公共类是很奇怪的。


编辑: 要具有类似的结构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();
于 2010-11-30T09:41:29.973 回答
0

在 TagClass 类中添加 MyEditorClass 类型的成员并在创建新的 TagClass 实例时分配它:

public class TagClass
{
    private MyEditorClass editor = null;

    public TagClass(MyEditorClass parent)
    {
        this.editor = parent;
    }

    public void InsertTag1()
    {
        editor.Text += "Test tag 1";
    }
}

...

Tags = new TagClass(this);
于 2010-11-30T10:22:05.030 回答