如何在两个文件中的两个分部类之间共享变量?

时间:2017-07-11 03:30:14

标签: c#

我将此代码放在一个文件中:

namespace Japanese
{
    public partial class PhrasesPage : ContentPage
    {
        PhrasesFrame phrasesFrame = new PhrasesFrame();

此代码在另一个文件中:

namespace Japanese.Views.Phrases
{
    public partial class PhrasesPage
    {
        public void setTimeInterval()
        {

        phrasesFrame // can't access

我希望能够在第二个文件中访问phraseFrame,但似乎不可能。任何人都可以给我建议我可以做什么,所以我可以在另一个文件中访问它,这也是一个部分类。还有一个问题。我应该使用我的部分类继承所有文件中的ContentPage,还是仅仅一个文件?

2 个答案:

答案 0 :(得分:4)

您可以轻松访问其中部分类的所有成员,甚至是私有。

public partial class Test
{
    private int x = 5;
}

public partial class Test
{
    public void Run()
    {
        Console.WriteLine(x); // outputs 5
    }
}

但是,您使用不当。由于您的类位于两个不同的名称空间中,因此编译器将它们视为两个不同的类:

Japanese.PhrasesPage
Japanese.Views.Phrases.PhrasesPage

如果要使其像分段类一样工作,则需要将它们放在一个命名空间中:

// 1
namespace Japanese.Views.Phrases
{
    public partial class PhrasesPage : ContentPage
    {
        PhrasesFrame phrasesFrame = new PhrasesFrame();

// 2
namespace Japanese.Views.Phrases
{
    public partial class PhrasesPage
    {
        public void setTimeInterval()
        {
            phrasesFrame // CAN access

然而,对这些班级的责任进行一些分析 既然你把它们放在不同的命名空间中并从不同的类继承,那么它们可能有不同的含义,需要按设计分开吗?

您总是可以通过合成或聚合使类彼此相关,而不是使其成为局部。部分类不是很方便,通常用于代码生成场景。

对我而言,setTimeInterval听起来与“短语”和“页面”无关。

答案 1 :(得分:3)

由于命名空间不同,它们被视为两个不同的类。您应该为它们使用公共名称空间,如下所示:

namespace Japanese
{
  public partial class PhrasesPage : ContentPage
  {
    PhrasesFrame phrasesFrame = new PhrasesFrame();
    //...
  }
}

namespace Japanese
{
  public partial class PhrasesPage
  {
    public void setTimeInterval()
    {
      phrasesFrame // accessible! :)
    }
  }
}