2017-06-08 20 views
1

他のファイルに実装を移動しようとしましたが、Form1.csでエラーが発生しました。 "OpenPortは現在のコンテキストに存在しません" 何か提案してください。C#別のファイルの同じ名前空間

Form1.cs 

namespace MyApp 
{ 
    void Form1Load(object sender, EventArgs e) 
    { 
     OpenPort(); 
    } 
} 

Port.cs 

namespace MyApp 
{ 
    public static void OpenPort(); 
} 
+0

のようなメソッドを呼びたいのなら、この

namespace MyNamespace { partial class MyClass { void MyMethod() {} } partial class MyClass { void MyOtherMethod() {} } } 

機能的には、この

namespace MyNamespace { class MyClass { void MyMethod() {} void MyOtherMethod() {} } } 

を回すことができます'public static void OpenPort();'名前空間で直接? –

+2

私はメソッドがクラスの内部で行われるべきであり、名前空間の中で直接行われるべきではないと思います。クラス 'partial'をマークした場合、確かにメソッドは同じ名前空間を呼び出すことができます。 –

+0

'OpenPort'関数を' Port'という静的クラスに入れて、 'Port.OpenPort(); 'と呼んでください。 –

答えて

1

まず、ネームスペースに直接メソッドやプロパティを宣言することはできません。メソッドを記述するクラスを最初に宣言しなければなりません。次に、同じクラスを別のファイルに「拡散」したい場合は、partialというキーワードを追加する必要があります。

Form1.cs 

namespace MyApp 
{ 
    public partial class MyClass 
    { 
     public void Form1Load(object sender, EventArgs e) 
     { 
      OpenPort(); 
     } 
    } 
} 

Port.cs 

namespace MyApp 
{ 
    public partial class MyClass 
    { 
     public static void OpenPort() 
     { 
      // your implementation here 
     } 
    } 
} 
+1

別のアセンブリ - 異なるファイル。 –

+1

編集されました。ありがとう! –

1

名前空間をコンテナのように考えます。ちょうど他のコンテナと同様に、あなたはそれに物を入れることができます。名前空間の利点は、プログラムが大規模になったときに、特に同じファイルにすべてを入れる必要なく、機能をまとめてグループ化できることです。名前空間は、名前を別々にする方法でもあります。ロンドン道路とハイストリートの両方に18番のロンドン道路と18番のハイストリートがあります。例えば

MyNamespaceMyClassMyClassあなたがMyNamespaceためusingステートメントを追加する必要が別の名前空間からMyMethodを使用するにはMyMethod

namespace MyNamespace 
{ 
    class MyClass 
    { 
     void MyMethod() {} 
    } 
} 

が含まれているが含まれています。これはさらに一歩MyOtherNamespaceMyClassMyClassMyMethod MyOtherNamespaceMyClassMyClassはまた、あなたがusingステートメントを追加する必要が別の名前空間からMyMethodを使用するように、前と同じようにMyMethod

namespace MyOtherNamespace 
{ 
    class MyClass 
    { 
     void MyMethod() {} 
    } 
} 

が含まれている含まれている含まれている含まれていると想像撮影

MyOtherNamespace

あなたはMyNamespaceMyOtherNamespaceの両方からMyMethodを使用したい場合は、あなたが持っている場合、同じルールが適用されるこの

MyNamespace.MyClass.MyMethod(); 
MyOtherNamespace.MyClass.MyMethod(); 

のような呼び出しに名前空間名を追加することにより、使用するかをあなたのプログラムに伝える必要があります同じ名前空間で同じメソッドを持つ複数のクラス - あなたが名前空間に関連するノートで

MyFirstClass.MyMethod(); 
MySecondClass.MyMethod(); 

を含める必要はありませんという違い、あなたも012を使用して、複数のファイル間のクラスを分割することができますキーワード。たとえば、あなたは彼らが同じで、両方のケースでは、あなたがこれはひどいです。この

MyClass.MyMethod(); 
MyClass.MyOtherMethod(); 
関連する問題