【问题标题】:C# : "Cannot explicitly call operator or accessor" [duplicate]C#:“无法显式调用运算符或访问器”[重复]
【发布时间】:2017-07-04 06:17:23
【问题描述】:

我知道有很多关于这个错误的问题,但我已经尝试了他们建议的所有方法,但没有任何效果。

首先,我是 C# 新手,这就是为什么我找不到适合自己的解决方案 :(

我的问题:我有这段代码(如果我总结了很多)

public class ClassA {
  private static int numA;

  public static void MainProcess() {
    numA = ClassB.get_numB(); 
    ...
  }
}

public ClassB {
  private static int numB { get; set; }
  ...
}

现在,它得到错误 'numB.get' cannot explicitly call operator or accessor 。我看到我们应该改写numA = ClassB.numB,但这次我得到了错误:The property or indexer 'ClassB.numB' cannot be used in this context because the get accessor is inaccessible'ClassB.numB' is inaccessible due to its protection level

所以,我唯一尝试过并且有效的方法是更改​​ public static int numB 中的 numB,但我真的不喜欢它不是私有变量...那么,有解决方案吗?

谢谢!

【问题讨论】:

  • 如果您想从课堂外访问它,那么它不是真正的private,是吗?如果你不希望它是public,那么你可以试试internal。您还可以拥有public getterprivate setter
  • "但我真的不喜欢它不是私有变量" - 你正试图从不同的类访问它。所以你试图使用它,就好像它是 not 私有的。要么您希望它是私有的,并且您只能在ClassB 的程序文本中访问它,要么您需要将其公开(或内部)。
  • 将其修改为私有变量,并创建一个公共属性,只获取/返回该私有变量的值。
  • @Sujith:这是一个自动实现的属性,所以它已经由一个私有字段支持。

标签: c#


【解决方案1】:

您可以将其作为私有变量或公共变量。如果您想访问它,请将其公开!

实际上,如果你只是想让 getter 公开而 setter 私有,你可以这样做:

public static int numB { get; private set; }

或者您可以将其设为只读:

public static readonly int numB;

然后你可以在构造函数中设置它的值,它的值永远不会改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多