成员因其保护级别而无法访问错误。

7

与此话题相关的链接: 如何将我的类中的字符串连接到表单

我试图根据他们的答案(特别是Jeremy先生的答案)做出解决方案,但是一直出现这个错误:

'KeyWord.KeyWord.keywords' 由于其保护级别而不可访问

KeyWords.cs 的代码:

namespace KeyWord
{
    public class KeyWord
    {
        String[] keywords = { "abstract", "as", "etc." };

    }
}

主.cs的代码

// Check whether the token is a keyword. 
var keyboardCls = new KeyWord.KeyWord();
String[] keywords = keyboardCls.keywords;

for (int i = 0; i < keywords.Length; i++)
{
    if (keywords[i] == token)
    {
        // Apply alternative color and font to highlight keyword.        
        rtb.SelectionColor = Color.Blue;
        rtb.SelectionFont = new Font("Courier New", 10, FontStyle.Bold);
        break;
    }
}

我应该怎么做?

6个回答

16
你需要将 keywords 定义为公共的。
public String[] keywords = { "abstract", "as", "etc." };

目前它是private,因此在类外部不可访问。

访问修饰符(C#编程指南)

类成员(包括嵌套类和结构体)可以是public、protected internal、protected、internal或private。类成员和结构体成员(包括嵌套类和结构体)的访问级别默认为private


6
请使用以下代码:
public class KeyWord
    {
        String[] keywords = { "abstract", "as", "etc." };

    }

变量的保护级别默认为private。在类的成员中使用属性是一种好的编程实践。

1
你应该按照以下方式为关键字创建一个属性:
public String[] Keywords
{
get{return keywords;}
}

这是一种保护违规,因为变量默认是私有的。


这个答案与其他答案的区别在于,除非您定义了一个“set”方法,否则您无法在类外设置该值。 - Sayse

0

你需要使用 "public" 关键字来定义你的类


该类已经有一个公共关键字。参数缺少此关键字,而不是类。 - quant

0
尝试将字符串数组设为公共的:
public class KeyWord
{
    public String[] keywords = { "abstract", "as", "etc." };

}

0
请确保将构造函数添加为具有公共访问说明符。这可能是此类错误的原因。 示例:
Customer() {
this.CustomerId = ++counter;
}
Change it to : 
public Customer() {
this.CustomerId = ++counter;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接