C#公共属性使访问者无法从另一个名称空间

时间:2015-07-21 16:05:50

标签: c# properties public accessor

我试过把这个领域公之于众;我也尝试过使用public get,即使我理解,属性中的访问修饰符只有在限制性更强时才会生效。然而,我无法从TestUnit访问“ problem.Points ”(最后一行)属性。我收到“get accessor accesscessible”警报。请注意,我可以从同一名称空间中的另一个类访问它。我必须在这里遗漏一些非常基本的东西。

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)

2 个答案:

答案 0 :(得分:1)

如果你看一下

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

所有引用的类必须对调用程序集可见。检查以确保Node也可见。

答案 1 :(得分:0)

将您的界面更改为:

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

接口只定义公共成员,因此您不必声明它。必须实现接口的所有成员,因此也不需要将它们声明为抽象。

除非私人名单指出;在代码中的某个地方设置了我们无法看到你永远不会初始化这个变量所以你的get将为null;