我正在使用部分类来分割两个文件之间的某些功能,但是我收到了一个错误。我做错了什么?

A1.cs:

private partial class A
{
    private string SomeProperty { get { return "SomeGeneratedString"; } }       
}

A2.cs:

private partial class A
{
    void SomeFunction()
    {
        //trying to access this.SomeProperty produces the following compiler error, at least with C# 2.0
        //error CS0117: 'A' does not contain a definition for 'SomeProperty'
    }
}
有帮助吗?

解决方案

两个部分类是否在同一名称空间中?这可能是一个解释。

其他提示

与@Andrey K相同,但简单来说就是

使用每个文件的“属性”窗口将所有部分类的构建操作设置为“编译”

构建操作属性“>

不同的命名空间?

起初,我无法重现您的错误。

当在命名空间内单独定义这些部分类时,private关键字会导致构建失败并带有<!> quot;命名空间中定义的元素不能显式声明为private,protected或protected internal <!> quot ; ...

如果我将它们保密并将它们嵌套在另一个类中,一切正常。

只有在一个文件中,我将类的一部分嵌套在另一个类中,并且在另一个文件中,我没有嵌套该类,然后删除private关键字时,我才能重现您的错误...如下所示:

的Class1.cs:

namespace stackoverflow.answers
{
    public class Foo
    {
        private partial class Bar
        {
            private string SomeProperty { get { return "SomeGeneratedString"; } }
        }
    }
}

Class2.cs:

namespace stackoverflow.answers
{
    partial class Bar
    {
        void SomeFunction()
        {
            string bar = this.SomeProperty;
        }
    }    
}

如果命名空间不同,我也会收到您描述的错误。

请发布解决方案的整个代码,因为提供的代码是无效的C#语法,并且在没有更多上下文的情况下无法查看。

修改

解决方案:构建动作 - <!> gt; Complile,别的什么

我会尝试更具体:

我在3个不同文件中的3个部分类之间共享了一个类。在某一时刻,函数调用(来自其他部分中声明的函数的一个部分)开始显示错误<!>在当前上下文中不存在<!>“。我花了很长时间,直到有人帮助我弄清楚我不小心设置了文件的构建操作part to <!> quot; EmbeddedResourse <!> quot;而不是<!>“;编译<!>”;

要切换构建操作,您应右键单击解决方案资源管理器中的文件,然后选择属性。然后更改构建操作。

这个问题很老了,在这种情况下,我的答案并不完全有用。但它可能有助于另一个非常罕见的与部分类相关的案例。对不起,如果我的英语不清楚。

我认为这是因为你宣布你的班级为<!> quot; private <!> quot;。尝试将修饰符更改为<!> quot; internal <!> quot;这样两个<!>“一半<!>该类可以<!>“;参见<!>”;彼此在同一个集会中。

我得到的错误是:

命名空间中定义的元素不能显式声明为private,protected或protected internal

我猜测它是如前所述的命名空间问题。

所有文件都应位于同一文件夹中。

我分析你的代码。您将部分类声明为嵌套类,这是导致显示错误的原因。为什么bcz partial class不会声明为嵌套类,parial关键字被拆分为多个文件所以,当你在嵌套类中声明它无法识别时,每个文件都是相同的。

如果您使用部分类来补充运行时文本模板生成的类,那么额外帮助可以节省您时间的角落情况。

问题在于,您的部分类'命名空间确实与该类的生成部分的命名空间不同。要检查这一点,只需查看生成的代码。

要解决此问题,您需要编辑项目的.csproj文件,并在有关该模板的部分中添加<ClassNamespace>标记:

<Content Include="MyTemplate.tt">
  <Generator>TextTemplatingFilePreprocessor</Generator>
  <ClassNamespace>My.Namespace</ClassNamespace>
  <LastGenOutput>MyTemplate.cs</LastGenOutput>
</Content>
scroll top