将类文件划分为分部类会影响作用域
本文关键字:影响 作用域 文件 划分 | 更新日期: 2023-09-27 18:29:53
我有一个类库项目,我的namespace/main类如下所示:
文件:Document.cs
namespace HtmlEngine
{
public class Document : IDisposable
{ ...
public class DocumentActionReplaceByTag : IDocumentAction
{
所有这些都很好,在我提出的另一个项目/组装中:
using HtmlEngine;
...
DocumentActionReplaceByTag currentDocAction = new HtmlEngine.DocumentActionReplaceByTag("[NEXT_PART]");
而且效果非常好。但是,我现在已经将该Document类文件划分为几个文件,称为DocumentActions.cs和DocumentSections.cs,并将主要功能保留在Document.cs文件中。在每一个上面,我都放了:
public partial class Document : IDisposable
{
现在,在使用项目中,我收到一个"无法解析符号"DocumentActionReplaceByTag"错误。我仍然使用HtmlEngine。
我能在网上找到的最接近的东西是这篇类似描述我困境的帖子,但他不太清楚发生这种情况的原因:http://www.daniweb.com/software-development/csharp/threads/140673/understanding-partial-classes
我一直认为分部类是语法糖,在编译之前它们被组合成一个单独的类。我为每个分部类声明重复了接口,不确定这是否是一个因素。
为什么现在会超出范围?
如果我正确理解了您的代码,那么创建新DocumentActionReplaceByTag的行必须看起来像:
DocumentActionReplaceByTag currentDocAction = new HtmlEngine.Document.DocumentActionReplaceByTag("[NEXT_PART]");
至于IDisposable,它必须只在一个部分文件中指定。
Glinkot,从提供的代码中,我看到您的DocumentActionReplaceByTag类被放入Document类中。下面的示例显示嵌套类总是可以通过ParentClass.NestedClass访问(注意,我的所有类都在同一个文件中,代码不编译)
namespace SomeNamespace
{
public class ParentClass
{
public class NestedClass { }
public void SomeMethod()
{
// This compiles, since nested class is used inside parent class
NestedClass nestedClass = new NestedClass();
}
}
public class AnotherClass
{
public AnotherClass()
{
// Not compiles since "NestedClass" is defined as nested class
var nestedClass = new NestedClass();
// Will compiles
var nestedClass = new ParentClass.NestedClass();
// Not compiles since "NestedClass" is defined as nested class
NestedClass nestedClass = new NestedClass();
// Will compiles
ParentClass.NestedClass nestedClass = new ParentClass.NestedClass();
}
}
}
如果您有其他情况,请提供更多详细信息。