-2

由于 NullReferenceException,以下两行代码导致我的程序出错。

ISceneGraphFactory factory = null;
IGroupNode Root = factory.CreateGroupNode("Root", "GroupNode", null);

这两个都是接口。所以基本上我正在尝试使用工厂创建第二个接口 IGroupNode。(错误发生在第二行)。以下是接口本身的外观:

public interface ISceneGraphFactory
{
    IDrawableNode CreateDrawableNode(string name, string DrawableType, object drawableData);
    IGroupNode CreateGroupNode(string name, string groupType, object groupData);
    IStateNode CreateStateNode(string name, string stateType, object stateData);
    ITransformNode CreateTransformNode(string name, string transformType, object transformData); 
}

public interface IGroupNode : ISceneNode, IEnumerable<ISceneNode>
{
    void AddChild(ISceneNode child);
}

他们都在运作,并且在其他程序中工作过。

有谁知道在使用接口时如何摆脱这个错误?我认为这是在抱怨,因为我在这里使用接口......

4

2 回答 2

3

您需要一个对象来调用 CreateGroupNode(因为它不是静态的)。

ISceneGraphFactory factory = null;
factory = new SomeClassThatImplementsISceneGraphFactory();
IGroupNode Root = factory.CreateGroupNode("Root", "GroupNode", null);

有些人会指出它不仅不是静态的,而且是“虚拟的”,因为它只在接口中定义。在任何情况下,您都需要一个对象来调用它。

于 2013-11-03T00:14:38.627 回答
2

问题在这里很清楚。您正在分配null给变量,然后尝试对其进行方法调用。它不能工作(除非该方法是扩展方法,但假设它不是)。

ISceneGraphFactory factory = null;
IGroupNode Root = factory.CreateGroupNode("Root", "GroupNode", null);

factory在调用任何方法之前,您必须分配一个对象。而且因为您使用接口声明变量,所以您的对象必须是实现ISceneGraphFactory.

于 2013-11-03T00:16:09.973 回答