-2

次の 2 行のコードは、NullReferenceException が原因で、プログラムでエラーを引き起こしています。

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

これらは両方ともインターフェイスです。したがって、基本的には、ファクトリを使用してその 2 番目のインターフェイス IGroupNode を作成しようとしています。(エラーは 2 行目で発生します)。インターフェイス自体は次のようになります。

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 に答える