2015-07-21 81 views
1

我試圖使該字段公開;我也嘗試過使用public get,即使按照我的理解,在屬性內部訪問修飾符只會在更嚴格的情況下才會起作用。但是我無法訪問TestUnit的'問題。點'(最後一行)屬性。我收到「獲取訪問者無法訪問」警報。請注意,我可以從同一名稱空間中的另一個類訪問它。我必須在這裏錯過一些非常基本的東西。C#公共屬性獲取訪問器無法從另一個命名空間訪問

namespace Coordinates_Path 
{ 
    public interface IProblem 
    { 
     abstract public List<Node> Points { get; set; } 
     abstract public Object GetStartState(); 
     abstract public bool IsGoalState(); 
     abstract public Object GetSuccessor(); 
    } 

    public class ShortestPathThroughCoordinates : IProblem 
    { 
     private Node startState; 
     private List<Node> points; 

     public List<Node> Points { get { return points; } private set; } 
    //... 
    //... 

using System; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Coordinates_Path; 
using System.Linq; 
using System.Collections.Generic; 

namespace CoordPathTest 
{ 
    [TestClass] 
    public class KruskalTest 
{ 
    [TestMethod] 
    public void TestMST() 
    { 
     // ... 

     IProblem problem = new ShortestPathThroughCoordinates("P1", coordDic); 
     MSTKruskal kruskal = new MSTKruskal(problem.Points) 
+0

錯誤信息究竟是什麼? 「Node」類型是公開的,還是至少對測試程序集可見? –

+0

你是。而已。我全力檢查它,但不知怎的,沒有注意到** Node **並未公開。謝謝 –

+0

把它變成了答案,然後:-) –

回答

0

更改你的界面如下:

public interface IProblem 
{ 
    List<Node> Points { get; set; } 
    Object GetStartState(); 
    bool IsGoalState(); 
    Object GetSuccessor(); 
} 

接口只定義了公共成員,所以你不必申報。接口的所有成員都必須實現,因此不需要聲明它們是抽象的。

除非私人列表點;在代碼中的某處進一步設置,我們不能看到你永遠不會初始化這個變量,所以你的get將是null;

+0

Eric提到的問題是沒有公佈'Node'。是的,我知道這裏有很多重複的聲明,但我嘗試了各種多餘的改變。謝謝 –

1

如果你看一下

public class ShortestPathThroughCoordinates : IProblem 
{ 
    public List<Node> Points { get { return points; } private set; } 
    ... 

所有引用的類必須要調用程序集可見。檢查以確保Node也是可見的。

+0

注意@Lasse在「abstract public」不屬於接口聲明的問題下的評論。接口本身是公開的,它所實現的所有成員必須以相同的可見性實現,所以你實際上並沒有指定它們的可見性。 –