2013-11-03 19 views
-2

由於NullReferenceException,以下兩行代碼在我的程序中導致錯誤。對象引用未設置爲對象的實例...但帶有接口。 (C#)

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

它們都在運行,並且已在其他程序中運行。

有沒有人知道如何擺脫這個錯誤時使用接口?我認爲這是抱怨,因爲我在這裏使用接口...

回答

3

您需要一個對象來調用CreateGroupNode(因爲它不是靜態的)。

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

有些人會指出,它不僅是靜態的,它是「虛擬的」,因爲它只在接口中定義。無論如何,你需要一個對象來調用它。

2

這裏的問題很明顯。您將null分配給變量,然後嘗試對該變量執行方法調用。它不能工作(除非該方法是擴展方法,但假設它不是)。

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

您必須在調用任何方法之前將對象指定爲factory。因爲你使用接口聲明變量,所以你的對象必須是實現ISceneGraphFactory的類的一個實例。

+0

所以我可能只是創建一個虛擬對象,並這樣做?我不需要工廠對象,我只需要使用與其接口關聯的方法。 – Musicode

+1

看起來你真的不知道接口是什麼以及它是如何工作的。不,你不能調用接口的方法,因爲它沒有分配代碼(它沒有在接口級別實現)。你需要一個實現接口的類(履行契約),因爲這就是你真正在這裏調用的。 – MarcinJuraszek

+0

是的,這就是我的意思是與它聯繫在一起......我有IFactory工作的實現,但它的實現只是返回其他接口。 – Musicode

相關問題