13

我目前处于必须使用部分类的场景中。在这个部分类中,我有一些方法需要处理另一个类中的字段。

例如

编辑:对不起:第一堂课已经宣布了partial

public partial class myClass
{        
    private string _myString;

    public string myString
    {
        get { return _myString; }
        set { _myString = value; }
    }
}

public partial class myClass
{
    public void doSomething()
    {
        myString = "newString";
    }
}

编译器说myString部分类中不存在!

我该如何克服这个问题?

4

5 回答 5

40

一个常见问题是部分类位于不同的命名空间中。命名空间是类名的一部分,namespace1.myClassnamespace.a.myClass作为两个完全独立的类处理。

根据MSDN,部分类的每个部分应该:

  • partial修饰符
  • 具有相同的类名
  • 在同一个命名空间中
  • 在同一个程序集或 DLL 中
  • 具有相同的可见性(如公共、私人等)
于 2010-11-09T11:18:52.563 回答
12

您需要使用发布的代码修复一些问题:

在 C# 中使用分部类时,必须将类的所有部分声明为分部类

你有:

 public class myClass {}
 public partial class myClass {}

需要变成:

public partial class myClass {}
public partial class myClass {}

其次,你试图设置:

myString="newString";

但是myString是没有设置器的公共财产。

因此,要么在声明时添加一个 setter myString

public string myString
{
    get{ return _myString; }
    set { _myString = value; }
}

或者只是使用:

_myString="newString";

在您的第二个部分类文件中。

于 2010-11-09T11:23:51.240 回答
1

当我将您的代码放入 Visual Studio 时,我得到了一个不同的错误:

myString = "newString";
Error   Property or indexer 'ConsoleApplication1.Program.myClass.myString' cannot be assigned to -- it is read only

如果我将其更改为此,它可以正常工作:

_myString = "newString";

编辑:

不需要在两个宫殿中将一个类标记为部分,这编译得很好:

    public class myClass
    {

        private string _myString;

        public string myString
        {
            get { return _myString; }
        }
    }


    public partial class myClass
    {

        public void doSomething()
        {
            _myString = "newString";
        }

    }
于 2010-11-09T11:18:27.680 回答
1

假设两个声明都引用同一个命名空间,您的第一个声明不包含 partial 关键字:

使用 partial 关键字表示可以在命名空间内定义类、结构或接口的其他部分。所有部分都必须使用 partial 关键字。所有部分必须在编译时可用以形成最终类型。所有部分必须具有相同的可访问性,例如public、private 等。public、private 等。

http://msdn.microsoft.com/en-en/library/wa80x488(v=VS.80).aspx

于 2010-11-09T11:18:47.967 回答
0

您只需将课程标记为partial两个地方,而不仅仅是其中一个。

于 2010-11-09T11:16:57.743 回答