由于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);
}
他们都在运作,并在其他计划中工作过。
在使用接口时,有谁知道如何摆脱这个错误?我认为这是抱怨,因为我在这里使用接口......
答案 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
的类的实例。