私有成员是否在分部类中可见

本文关键字:成员 是否 | 更新日期: 2023-09-27 18:33:47

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

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'在当前上下文中不存在"

日志必须声明为公共才能编译,这是一个惊喜。我错过了什么吗?

私有成员是否在分部类中可见

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

假设该类位于同一个.cs文件中。

代码

namespace Whatever
{
    partial class Partial
    {
        private int a = 1;
    }
    partial class Partial
    {
        public int A
        {
            get
            {
                return this.a;
            }
        }
    }
}

编译就好了。

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

为了解决您的特定问题,您是否验证了这两个分部类不仅位于同一文件夹中,而且还都包含在您尝试编译的 Visual Studio 项目中?它们都应列在 VS 中"解决方案资源管理器"中的项目下。此外,它们都应该将其"操作"属性设置为"编译"。