我在仔细检查Windows窗体ListBoxCollection添加方法, 在分析过程中,我发现方法“add”在base Object中调用Equals方法 为什么这个方法会做这个动作?
我使用过“Call Stack”,我找到了这个答案:
我们调用:System.Windows.Forms.ListBox.ObjectCollection.Add(object item)
它将调用:System.Windows.Forms.ListBox.ObjectCollection.AddInternal(object item)
它将调用:System.Windows.Forms.ListBox.NativeAdd(object item)
它将调用:System.Windows.Forms.ListControl.GetItemText(object item)
它将调用:System.Windows.Forms.Formatter.FormatObject(object value,System.Type targetType,System.ComponentModel.TypeConverter sourceConverter,System.ComponentModel.TypeConverter targetConverter,string formatString,System.IFormatProvider formatInfo,object formattedNullValue ,object dataSourceNullValue)
它将调用:System.Windows.Forms.Formatter.IsNullData(object value,object dataSourceNullValue)
最后它将调用:object.Equals(object objA,object objB)
此方法使我的等同方法也运行:
WindowsFormsApplication1.Student.Equals(object obj)
和将发送到我的等于方法的最后一个参数(作为obj)是一个DBNULL对象! 什么是DBNULL?
答案 0 :(得分:2)
因为它需要能够知道哪个项目正在触发事件。如果对象是完全相同的对象,则选择,编辑,删除变得困难和混乱。