【问题标题】:Internal access modifier内部访问修饰符
【发布时间】:2012-07-01 06:27:02
【问题描述】:

我在这样的项目中有 2 个类:

namespace ConsoleApplication1
{
    internal class ClassA
    {
         internal int dataMember;
    }
}

namespace ConsoleApplication1
{
    class ClassB 
    {
        static void Main(string[] args)
        {
            ClassA c = new ClassA();
            Console.Write(c.dataMember); //Cannot access??
        }
    }
}

我为 A 类及其数据成员使用了内部访问修饰符

虽然A类的对象可以在B类的主体中创建,但是为什么我不能在同一个程序集中使用内部访问说明符访问它的数据成员?

这是它在 VS 2010 中给出的错误:

“ConsoleApplication1.ClassA.dataMember”因其保护级别而无法访问

【问题讨论】:

  • dataMember 可访问 (ideone)。也许您缺少 using System; 指令,所以 Console 不可见?
  • 您能给我们看一张显示您的项目布局、代码和错误消息的屏幕截图吗?这可能会给我们一些提示。

标签: c#


【解决方案1】:

你应该可以的。您的确切代码 - 只需添加 using System; 指令 - 为我编译。

检查您是否实际保存了所有文件等 - 如果存在编译时错误,请将其包含在您的问题中。 ClassA 中可能还有其他问题(您没有向我们展示)导致该类无法编译?

还要检查它们是否真的在同一个项目中——而不仅仅是在同一个命名空间中。

【讨论】:

  • @Akash:我怀疑您发布的代码不是您当时正在构建的代码 - 或者它不是您正在构建的代码全部 .您发布的内容确实非常有效。请复制并粘贴所有您在问题中遇到的代码。我非常怀疑这是一个编译器问题。
【解决方案2】:

我是这样得到结果的:

    internal class A
    {
        internal int X = 5;
    }
    static class B
    {
        public static void Show()
        {
            A a = new A();
            MessageBox.Show(a.X.ToString());
        }
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        B.Show();
    }

也是这样:

    internal class A
    {
        internal int X = 5;
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        A a = new A();
        MessageBox.Show(a.X.ToString());
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 2011-04-18
    • 2011-10-22
    • 2010-12-24
    • 2016-08-27
    • 2013-03-13
    相关资源
    最近更新 更多