سؤال

أحاول الحصول على نفس الوظيفة التي يتمتع بها combobox ، مثل 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();
}

والسبب هو أن فئة Tags تستدعي مربع Editorbox تم نقلها إلى MyEditorClass وإذا قمت بإنشاء فئة Tags بدون هذا المحرر ، فلن يعمل.

يبدو 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؟ نظرًا لأنك لا تستطيع استخدام combobox.items ، ولكن إذا أعلنت واحدة ، فيمكنك استخدام combobox.items على تلك التي أعلنتها.

هل كانت مفيدة؟

المحلول

اصنع لك Tags منشأه readonly, ، ثم يمكن تهيئتها في المُنشئ فقط:

public readonly TagClass Tags;

مرجع الكائن المخزن في Tags لا يمكن تغييره لاحقًا ثم هذا الرمز:

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

لن يجمع.

أو ، الاحتمال الثاني ، حتى أفضل - كشف الجمهور فقط لك 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();

نصائح أخرى

في فئة TagClass ، أضف عضوًا في Type 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top