对象引用未设置为对象的实例...但具有接口。 (C#)

时间:2013-11-03 00:12:44

标签: c# interface nullreferenceexception

由于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);
}

他们都在运作,并在其他计划中工作过。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

这个问题非常清楚。您将null分配给变量,然后尝试对其进行方法调用。它不起作用(除非该方法是一种扩展方法,但只是假设它不是)。

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

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