2017-07-11 7 views
1

私は1つのファイルにこのコードを持っている:2つの部分クラス間で変数を2つのファイルで共有するにはどうすればよいですか?

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 

私は2番目のファイルにphrasesFrameにアクセスできるようにしたいと思いますが、それは可能ではないようです。誰も私ができることについて私に示唆を与えることができるので、私はこれも部分クラスである他のファイルでこれにアクセスすることができます。もう1つの質問。私は、部分クラスを持つすべてのファイルでContentPageを継承する必要がありますか、1つのファイルで十分ですか?

+2

を2つの無関係なクラス( 'Japanese.PhrasesPage'と' Japanese.Views.Phrases.PhrasesPage'が)のプライベートフィールドにアクセスすることはできませんなぜあなたは求めていますお互い? –

+2

'PhrasesPage'は両方とも異なる名前空間に存在するため、単一のクラスではコンパイルできません。 –

答えて

4

内部の部分クラスのすべてのメンバーに簡単にアクセスすることができます。

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

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

ただし、誤った使い方をしています。あなたのクラスが2つの異なる名前空間にあるので、コンパイラは2つの異なるクラスとして扱います:

// 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 

Japanese.PhrasesPage 
Japanese.Views.Phrases.PhrasesPage 

あなたはそれが部分クラスのように動作するようにしたい場合は、単一の名前空間にそれらを配置する必要があります

しかし、これらのクラスのresponsibilitiesに関するいくつかの分析を行います。
異なる名前空間に配置し、異なるクラスから継承しているので、異なる意味を持ち、デザインごとに別々のクラスにする必要がありますか?

クラスは、クラスを部分的にするのではなく、常にコンポジションまたは集約で関連付けることができます。部分クラスは非常に便利ではなく、通常はコード生成シナリオで使用されます。

私にとっては、setTimeIntervalは「フレーズ」と「ページ」とは関係がありません。

+0

お返事ありがとうございました。私は今それを受け入れるだろう。 – Alan2

3

これらは名前空間が異なるため、2つの異なるクラスとして扱われます。次のようにあなたはそれらの両方のための共通の名前空間を使用する必要があります。

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

namespace Japanese 
{ 
    public partial class PhrasesPage 
    { 
    public void setTimeInterval() 
    { 
     phrasesFrame // accessible! :) 
    } 
    } 
} 
関連する問題