如何使Collection属性包含各种类型的子类

时间:2016-04-15 17:52:47

标签: c# winforms object-model

我编写了一个.NET组件,其中包含System.Collections.ObjectModel.Collection<MainClass>类型的属性。 MainClass本身有许多子类,名为Derived1Derived2等。编译后,我在设计器中单击此属性,当我尝试添加新项时,{{1}的实例}一直在创建。我想提示用户并询问他们打算插入什么类型的项目。我试图覆盖MainClass,但它无法更改项目。

此确切行为在InsertItem(int index, SearchableField item)属性中实现。在列编辑器中单击“添加”时,将显示一个对话框,并向程序员询问新项目的类型。

1 个答案:

答案 0 :(得分:-1)

以下是否适合您?您需要添加代码以适当调整数组的大小,但instances中的每个条目在Derived1退出时都会保留Derived2Main

using System;

public abstract class MainClass { }
public class Derived1 : MainClass { }
public class Derived2 : MainClass { }

class Program
{
    static void Main(string[] args)
    {
        Array instances = Array.CreateInstance(typeof(MainClass), 5);

        instances.SetValue(AddItem(typeof(Derived1)), 0);
        instances.SetValue(AddItem(typeof(Derived2)), 1);
        instances.SetValue(AddItem(typeof(Derived1)), 2);
        instances.SetValue(AddItem(typeof(Derived2)), 3);
        instances.SetValue(AddItem(typeof(Derived1)), 4);
     }

    static MainClass AddItem<T>(T type) where T : Type
    {
        return (MainClass)Activator.CreateInstance(type);
    }
}