【问题标题】:C# public property get accessor inaccessible from another namespaceC# 公共属性获取无法从另一个命名空间访问的访问器
【发布时间】:2015-10-11 05:01:40
【问题描述】:

我已经尝试公开该字段本身;我也尝试过使用 public get,即使据我所知,属性内的访问修饰符只有在限制性更强的情况下才会生效。但是我无法从 TestUnit 访问 'problem.Points'(最后一行)属性。我收到“让访问者无法访问”的警报。请注意,我可以从同一命名空间中的另一个类访问它。我一定在这里遗漏了一些非常基本的东西。

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)

【问题讨论】:

  • 错误信息到底是什么? Node 类型是公共的,还是至少对测试程序集可见?
  • 你是。而已。我到处检查它,但不知何故没有注意到 Node 不是公开的。谢谢
  • 然后把它变成一个答案:-)
  • 问题中的代码无法编译,不能在接口声明中指定abstract或public。

标签: c# properties public accessor


【解决方案1】:

如果你看

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

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

【讨论】:

  • 注意@Lasse 在abstract public 不属于接口声明的问题下的评论。接口本身是公共的,它实现的所有成员都必须以相同的可见性实现,因此您实际上不需要指定它们的可见性。
【解决方案2】:

把你的界面改成这样:

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

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

除非私有列表点;设置在代码中的某个位置,我们看不到您永远不会初始化此变量,因此您的 get 将为空;

【讨论】:

  • 正如 Eric 提到的,问题在于没有声明 Node public。是的,我知道这里有很多多余的声明,但是我尝试了各种多余的更改。谢谢
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
相关资源
最近更新 更多