-2

定義の繰り返しを避けるためにinternal function prototypes、クラスからOneC#using My.Class.Oneディレクティブ ( import My.Class.OneJava のように) に移行しようとしています。

Java では、これにより次のコードが変更されます。

public class One {
   public static void func1();
   public static void func2();
   public static int main(String[] args) { ... }
}

...別のファイルに分割されたそのコードに:

import My.Include;

public class One {
   public static int Main(String[] args) { ... }
}
------------------------->8--------------------------------    
package Include;

public class My {
   public static void func1();
   public static void func2();
   ...
}

'packages'Javaが C# で命名されていることを知った後、エラーで'namespaces'コンパイルに失敗する次の C# コードを思いつきました ( mcs One.cs My_include.cs -out:One.exe)。

> 「エラー CS0103: 名前 `func1' は現在のコンテキストに存在しません」

using System;
using My.Include;

public class One {
   public static int Main(String[] args) { return funct1(); }
}
------------------------->8--------------------------------    
using System;

namespace My {
   namespace Include {
      public class functions {
      public static void func1();
      public static void func2();
      ...
      }
   }
}

さまざまな命名規則を試しましたが、それでも同じエラーが発生します。私が間違っていることを教えてもらえますか?

4

1 に答える 1

1

が必要なように見えるpartial classので、メインクラスファイルは次のようになります。

// File:  One.cs
using System;

public class One
{
    static void Main()
    {
        // Your Main method here
    }
}

そして、次のような 2 番目のファイルが作成されます。

// File:  One.Externs.cs
using System;

public partial class One
{
    extern static void func1();
    extern static void func2();
}

コンパイル時に、これらの 2 つ (またはそれ以上) のファイルは、コンパイラによって 1 つのクラスに自動的に結合されます。これにより、探しているように見える分離が得られますが、関連する定義が正しいスコープ内に保持されます。

usingディレクティブは、Java のディレクティブと部分的に同義ですimport。C#usingではnamespace、クラスまたは部分クラスをimport.

于 2012-08-27T22:36:07.357 に答える