30

私は C# の初心者で、メイン クラスで使用したいクラスを作成しました。これら2つのクラスは別のファイルにありますが、一方を他方にインポートしようとするとusing、cmdは言う

型または名前空間名「MyClass」が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?

CLASSPATHJava では、このようなことを機能させるためにいじり回さなければならないことは知っていますが、C# についてはわかりません。

追加の詳細:

お気づきかもしれませんが、コマンド プロンプトからコンパイルして実行しています。を使用して非メイン クラスをコンパイルしています/target:library(メイン クラスのみが .exe ファイルであるべきだと聞きました)。

私のコードは次のようになります。

public class MyClass {
    void stuff() {

    }
}

そして私のメインクラス:

using System;
using MyClass;

public class MyMainClass {
    static void Main() {
        MyClass test = new MyClass();
        /* Doesn't work */
    }
}

メイン以外のクラスを取り込んでインポートしようとしましnamespace MyNamespace { }たが、うまくいきません。

4

8 に答える 8

43

UPDATE : C# 6 以降、クラス名を指定せずにクラスの静的メンバーを使用する場合は、 using static ディレクティブを使用して、次のように静的メンバーを現在のスコープにインポートできます。

using static MyNamespace.MyClass;

これは元の質問の内容ではありませんが、OP が取得するエラーと同様のエラーが発生するため、完全を期すために提供しています。

OPの質問への回答

usingは名前空間専用です。両方のクラスが同じ名前空間にある場合は、using.

.exe をコンパイルするときに、最初の手順で作成したアセンブリを参照する必要があります。

csc /t:library /out:MyClass.dll MyClass.cs
csc /reference:MyClass.dll /t:exe /out:MyProgram.exe MyMainClass.cs

ファイルを一緒にコンパイルするだけで、物事を簡単にすることができます。

csc /t:exe /out:MyProgram.exe MyMainClass.cs MyClass.cs

また

csc /t:exe /out:MyProgram.exe *.cs

編集:ファイルは次のようになります。

MyClass.cs :

namespace MyNamespace {
    public class MyClass {
        void stuff() {
 
        }
    }
}

MyMainClass.cs :

using System;

namespace MyNamespace {
    public class MyMainClass {
        static void Main() {
            MyClass test = new MyClass();
        }
    }
}
于 2013-02-06T12:15:11.693 に答える
30

これは非常に古い質問であることは知っていますが、同じ要件があり、c#6 以降、クラスをインポートする際に static を使用できることを発見しました。

これが誰かに役立つことを願っています....

using static yourNameSpace.YourClass;
于 2016-12-16T07:58:13.660 に答える
5

「インポート」(使用)する必要があるのMyClassは、クラス名自体ではなく名前空間です。両方のクラスが同じ名前空間にある場合、それを「インポート」する必要はありません。

意味MyClass.cs

namespace Ns1
{
    public class MyClass
    {
        ...
    }
}

使用法AnotherClass.cs

using Ns1;

namespace AnotherNs
{
    public class AnotherClass
    {
        public AnotherClass()
        {
            var myInst = new MyClass();
        }
    }
}
于 2013-02-06T11:55:59.050 に答える
2

それらが同じプロジェクト内の個別のクラス ファイルである場合、'import' ステートメントは必要ありません。クラスをそのまま使用してください。ファイルが別々のプロジェクトにある場合、'import' ステートメントを使用する前に、まずプロジェクトへの参照を追加する必要があります。

于 2013-02-06T11:59:35.687 に答える
2

他のクラスがライブラリ (つまり dll) としてコンパイルされていて、これが必要な場合は、Visual Studio からの参照を追加し、参照して dll ファイルを指定する必要があります。

プロジェクトに OtherClassFile.cs を組み込む必要があり、名前空間が既に同一である場合は、次のことができます。

  1. ソリューションを閉じて、
  2. YourProjectName.csproj ファイルを開き、次のセクションを探します

    <ItemGroup>                                            
        <Compile Include="ExistingClass1.cs" />                     
        <Compile Include="ExistingClass2.cs" />                                 
        ...
        <Compile Include="Properties\AssemblyInfo.cs" />     
    </ItemGroup>
    
  1. 追加する .cs ファイルがプロジェクト フォルダー (ソリューション内の既存のすべてのクラスと同じフォルダー) にあることを確認します。

  2. 以下のように内部にエントリを追加し、プロジェクトを保存して開きます。

    <Compile Include="OtherClassFile.cs" /> 
    

クラスが表示され、プロジェクトの一部として動作します。使用する必要はありません。これは、1 つのショットで複数のファイルを実行できます。

于 2013-12-08T13:17:28.240 に答える
1

MyClass名前空間ではなくクラスです。したがって、このコードは間違っています:

using MyClass //THIS CODE IS NOT CORRECT

MyClass(例: MyNamespace)の名前空間を確認する必要があります。次に、適切な方法で呼び出します。

MyNamespace.MyClass myClass =new MyNamespace.MyClass();
于 2013-02-06T11:56:57.830 に答える
1

usingクラスではなく名前空間をインポートするために使用されます。

したがって、クラスが名前空間にある場合X

namespace X
{
    public class MyClass {
         void stuff() {

         }
    }
}

次に、必要な別の名前空間で使用します

using System;
using X;

public class MyMainClass {
    static void Main() {
        MyClass test = new MyClass();
    }
}
于 2013-02-06T11:57:11.357 に答える
0
namespace MyNamespace
{
    public class MyMainClass
    {
        static void Main()
        {
            MyClass test = new MyClass();
        }
    }

    public class MyClass
    {
        void Stuff()
        {

        }
    }
}

名前空間はすべて同じ名前空間に含まれているため、名前空間を使用する必要はありません。

クラスがどの名前空間にあるのかわからない場合は、クラスを入力し (使用する大文字と小文字を区別します)、クラスにカーソルを合わせてCTRL+.を使用すると、手動インポートが提供されます。

于 2013-02-06T11:56:37.473 に答える