2015-07-21 41 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”不属于接口声明的问题下的评论。接口本身是公开的,它所实现的所有成员必须以相同的可见性实现,所以你实际上并没有指定它们的可见性。 –