我遇到了一个奇怪的问题,终于解决了。就像分享这个经验一样,其他人会搜索这个主题并得到答案。我定义了 2 个部分类,并编译时出现“不包含...的定义”的错误。这很奇怪,因为当 2 个班级是单独的班级时它起作用了。
这是代码:
之前:Foo1.cs
public class foo1{public void xyz(){}}
Foo2.cs
public class foo2{}
之后:Foo1.cs
public partial class foo1{ public void xyz(){}}
Foo2.cs
public partial class foo1{}
编译说“MyNamespace.foo1 不包含 xyz 的定义”。但是上课不偏的时候xyz还是不错的!这可能是由不同的命名空间引起的。但我对此表示怀疑。因为如果命名空间不同,它将无法编译。
我终于想通了。问题出在 Foo1.cs 中,命名空间未定义,但在 Foo2.cs 中定义。在我定义分部类之前,编译器为 Foo1.cs 提供了一个默认命名空间,这与在 Foo2.cs 中显式定义的命名空间相同。但是对于分部类,编译器不会为分部类提供默认命名空间。这就是为什么当第三方调用 foo1.xyz() 时编译器会抱怨。
我学到了总是为每个单独的 cs 文件显式定义命名空间的教训,除了你没有定义命名空间。