从部分类访问类字段

时间:2010-11-09 11:14:21

标签: c# partial-classes

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

例如

编辑:对不起:第一堂课已经宣布为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

我该如何克服这个问题?

5 个答案:

答案 0 :(得分:29)

一个常见的问题是在不同的命名空间中使用部分类。命名空间是类名的一部分,namespace1.myClassnamespace.a.myClass被视为两个完全独立的类。

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

  • 拥有partial修饰符
  • 具有相同的班级名称
  • 位于相同的名称空间
  • 属于同一个程序集或DLL
  • 具有相同的可见性(如公共,私人等)

答案 1 :(得分:7)

您需要使用您发布的代码修复一些事项:

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

你有

 public class myClass {}
 public partial class myClass {}

哪个需要成为

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

其次,你正试图设置

myString="newString";

myString是没有制定者的公共财产。

所以要么在声明myString

时添加一个setter
public string myString
{
    get{ return _myString; }
    set { _myString = value; }
}

或只是使用

_myString="newString";

在你的第二个特殊类文件中。

答案 2 :(得分: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";
        }

    }

答案 3 :(得分:1)

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

  

使用partial关键字表示   该类的其他部分,结构,   或界面可以在   命名空间。所有部件必须使用   部分关键字。所有部件必须   在编译时可以形成   最后的类型。所有部件必须   具有相同的可访问性,例如   public,private等等.public,private等。

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

答案 4 :(得分:0)

您只需在两个位置将该课程标记为partial,而不仅仅是其中一个。