web-dev-qa-db-ja.com

クラスを別のクラスにインポートするC#が機能しない

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

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

私はJavaでCLASSPATHをいじってこのようなものを動作させる必要があることを知っていますが、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 { }で囲み、それをインポートしようとしましたが、どちらも機能しません。

17
Bluefire

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

[〜#〜] edit [〜#〜]:ファイルは次のようになります。

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();
        }
    }
}
26
Alex

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

これが誰かの助けになることを願っています。

using static yourNameSpace.YourClass;
16
Jack Gajanan

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

定義MyClass.cs

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

使用法 AnotherClass.cs

using Ns1;

namespace AnotherNs
{
    public class AnotherClass
    {
        public AnotherClass()
        {
            var myInst = new MyClass();
        }
    }
}
3
DHN

他のクラスがライブラリ(つまり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
Guy
namespace MyNamespace
{
    public class MyMainClass
    {
        static void Main()
        {
            MyClass test = new MyClass();
        }
    }

    public class MyClass
    {
        void Stuff()
        {

        }
    }
}

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

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

0
LukeHennerley

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

using MyClass //THIS CODE IS NOT CORRECT

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

MyNamespace.MyClass myClass =new MyNamespace.MyClass();

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

クラスが名前空間Xにある場合

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

         }
    }
}

その後、別のネームスペースでそれを使用します

using System;
using X;

public class MyMainClass {
    static void Main() {
        MyClass test = new MyClass();
    }
}
0
gzaxx

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

0
RobStevo