Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么在尝试从ObservaleCollection或BindingList中创建子类时会出现NullReferenceException?_.net_Wpf_Ironpython_Observablecollection_Bindinglist - Fatal编程技术网

.net 为什么在尝试从ObservaleCollection或BindingList中创建子类时会出现NullReferenceException?

.net 为什么在尝试从ObservaleCollection或BindingList中创建子类时会出现NullReferenceException?,.net,wpf,ironpython,observablecollection,bindinglist,.net,Wpf,Ironpython,Observablecollection,Bindinglist,我正在使用observateCollections作为一些绑定的项源,并且遇到了一个场景,我想手动调用OnCollectionChanged,通知绑定引擎应该重新检查列表。(类似的BindingList是OnListChanged) 麻烦就从这里开始。令人恼火的是,这些方法受到保护,如果不对这些类型进行子类化,就无法调用它们,但当我尝试子类化时,它失败得惊人——即使我没有指定任何重写方法: >>> class ObservableCollectionEx(System.Coll

我正在使用
observateCollection
s作为一些绑定的项源,并且遇到了一个场景,我想手动调用
OnCollectionChanged
,通知绑定引擎应该重新检查列表。(类似的
BindingList
OnListChanged

麻烦就从这里开始。令人恼火的是,这些方法受到
保护
,如果不对这些类型进行子类化,就无法调用它们,但当我尝试子类化时,它失败得惊人——即使我没有指定任何重写方法:

>>> class ObservableCollectionEx(System.Collections.ObjectModel.ObservableCollection):
...     pass
... 
Traceback (most recent call last):
  File "<string>", line 1, in <module>
SystemError: Object reference not set to an instance of an object.

>>> class BindingListEx(System.ComponentModel.BindingList):
...     pass
... 
Traceback (most recent call last):
  File "<string>", line 1, in <module>
SystemError: Object reference not set to an instance of an object.
>类ObservableCollectionEx(System.Collections.ObjectModel.ObservableCollection):
...     通过
... 
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
SystemError:对象引用未设置为对象的实例。
>>>类BindingListEx(System.ComponentModel.BindingList):
...     通过
... 
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
SystemError:对象引用未设置为对象的实例。

我就要放弃了,我只想给CollectionChanged打一个该死的电话!救命啊

支持对
observateCollection
BindingList
进行子分类。下面是我为
BindingList
编写的一个示例,它公开了
OnListChanged
,并且不会引发任何异常

class BindingListEx<T> : BindingList<T>
{
    public void ForceListChanged()
    {
        base.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, 0));
    }
}


class Program
{
    static void Main(string[] args)
    {
        var list = new BindingListEx<int>();
        list.Add(42);
        list.ForceListChanged();
    }
}
类BindingListEx:BindingList
{
public void ForceListChanged()
{
base.OnListChanged(新的ListChangedEventArgs(ListChangedType.Reset,0));
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var list=new BindingListEx();
增加(42);
list.ForceListChanged();
}
}

支持对
可观察收集
绑定列表
进行子分类。下面是我为
BindingList
编写的一个示例,它公开了
OnListChanged
,并且不会引发任何异常

class BindingListEx<T> : BindingList<T>
{
    public void ForceListChanged()
    {
        base.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, 0));
    }
}


class Program
{
    static void Main(string[] args)
    {
        var list = new BindingListEx<int>();
        list.Add(42);
        list.ForceListChanged();
    }
}
类BindingListEx:BindingList
{
public void ForceListChanged()
{
base.OnListChanged(新的ListChangedEventArgs(ListChangedType.Reset,0));
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var list=new BindingListEx();
增加(42);
list.ForceListChanged();
}
}

在做了更多的研究之后,我找到了一个解决办法。阅读可以让我们了解幕后发生的事情,最显著的解释是:

Closed Construct generic是一个术语,用于表示子类为非泛型且基类参数化为具体类型的场景


因此,在本例中,
BindingListEx
是非泛型的,并且来自
BindingList
参数化基类的子类已作为其参数馈送
str
。这项措施目前有效。如果有人知道如何进行开放构造泛型继承(上面的第二种形式),请随意在这里发布,您将得到公认的答案,因为这是我最初的目标。现在,这将不得不做。

在做了更多的研究之后,我找到了一个解决办法。阅读可以让我们了解幕后发生的事情,最显著的解释是:

Closed Construct generic是一个术语,用于表示子类为非泛型且基类参数化为具体类型的场景


因此,在本例中,
BindingListEx
是非泛型的,并且来自
BindingList
参数化基类的子类已作为其参数馈送
str
。这项措施目前有效。如果有人知道如何进行开放构造泛型继承(上面的第二种形式),请随意在这里发布,您将得到公认的答案,因为这是我最初的目标。就目前而言,这是必须的。

您能给我们看一下这两种类型的定义吗?您能给我们看一下这两种类型的定义吗?谢谢,但我的问题是Ironpython(如果这在c#中不起作用,那将是很遗憾的)。我可能缺少的是在类定义中显示该部分的语法;我不知道Ironpython是如何做到这一点的,或者这里是否需要它。@Aphex Ironpython使用
[int]
代替
来表示泛型,但我不确定您是否可以在Ironpython中声明泛型类型。这似乎是您问题的根源。谢谢,但我的问题是在Ironpython中(如果在c#中不起作用,那将很遗憾)。我可能缺少的是在类定义中显示该部分的语法;我不知道Ironpython是如何做到这一点的,或者这里是否需要它。@Aphex Ironpython使用
[int]
代替
来表示泛型,但我不确定您是否可以在Ironpython中声明泛型类型。这似乎是你问题的根源。
public class SubClass<T> : BaseClass<T> {...}
>>> class BindingListEx(System.ComponentModel.BindingList[str]):
...     pass
... 
>>> 
>>> b = BindingListEx()
>>> b
<BindingListEx object at 0x000000000000002C>
>>> b.Add(3)
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: expected str, got int
>>> b.Add("cow")
>>>