无论是VS2003的IDE还是C#1.1的编译器(单独用csc也试过了),都无法接受为"XXX.YYY"形式的类名,根据就没法编译,但仔细观察.net Framework自身却有很多这样的类,如:ListView.ListViewItemCollection、ListBox.ObjectCollection、Menu.MenuItemCollection等,用在诸如ComboBox\List\Menu之类的控件中。
问题出来了,我在Winform下做了一个继承自UserControl的控件,想暴露了一个"XXX.YYY"形式的集合类出来但我声明的System.Windows.Forms.ComboBox.ObjectCollection(注意,这是System.Windows.Forms空间下的ComboBox.ObjectCollection类),可以编译,但不能使用智能感知,也就是打点根本出不来,在类内部也不行,但如果我换一个Array\ArrayList之类的集合对象却一点问题也没有,如果只是不能智能感知,我也就忍了,AAAA关键问题是:自定义控件中形如"XXX.YYY"的集合类属性,在使用时虽然从IDE上可以打开集合编辑器窗口,但编辑的结果在编译后就消息了,我看过代码,ComboBox之类的元素都是在创建后通过AddRange添加进来的,但我的控件根本没有生成AddRange代码,我自己加上后也是一重编辑编译就消失了,(我比较过,IList, ICollection, IEnumerable三个接口我的对象都已经实现)请大拿们指点,BBBB我怎么样才能在自定义类上使用集合类(设计时和运行时都OK);
另外,我通过ILDASM反编译发现"XXX.YYY"的类名已经被转成了"XXX/YYY",似乎通过一些Attribute可以指定,但我不知道,尽管我不清楚这样能不能解决真正的问题

解决方案 »

  1.   

    我怎么样才能在自定义类上使用集合类:
    从CollectionBase继承一个即可,只需写少量代码。
    另一个问题暂不知回答。
      

  2.   

    我和同事XXC讨论下来,他觉得应该是嵌套类,智能感知出不来可能是IDE的BUG。
    你可以这样写(随手写的):
    public class MyCtl: UserControl
    {
        public class MyCtlObjectCollection: CollectionBase
        {
            public MyCtlObjectCollection(MyCtl myCtl)
            {
            }
            //other MyCtlObjectCollection members
        }
        //other MyCtl members
    }