私人成员在部分班级中是否可见?

时间:2014-12-10 14:14:14

标签: c# .net

我有这个代码构造,每个命名空间部分都在同一个项目中的一个单独的文件中(和相同的项目文件夹):

namespace mynamespace
{
    public partial class Worker
    {
        private ILog log = /*instantiate a logger*/;
    }
}

并在第二个文件中

namespace mynamespace
{
    public partial class Worker
    {
        private void DoStuff()
        {
            log.Info("a message");
        }
    }
}

问题在于它不会编译,因为在第二个文件中VS2008编译器抱怨"名称' log'在当前上下文中不存在"

必须将Log声明为public才能进行编译,这是一个惊喜。我错过了什么吗?

3 个答案:

答案 0 :(得分:12)

分部类只是分布在各种文件中的普通类。编译器获取所有代码,将其合并为一个然后编译它。部分类的范围规则没有区别。适用于任何其他类的规则(是的,私人成员可以在一个类的所有成员中访问,无论是否部分)。

想象一下这个类在同一个.cs文件中。

答案 1 :(得分:0)

代码

namespace Whatever
{
    partial class Partial
    {
        private int a = 1;
    }

    partial class Partial
    {
        public int A
        {
            get
            {
                return this.a;
            }
        }
    }
}

编译得很好。

答案 2 :(得分:0)

是的,私有变量在部分类中的不同文件中可见。编译器将部分类的所有部分视为属于同一文件。

要解决您的特定问题,您是否已验证两个部分类不仅位于同一文件夹中,还包含在您尝试编译的Visual Studio项目中?它们都应该在VS的解决方案资源管理器中的项目下列出。此外,他们应该都有他们的行动'属性设置为'编译。'