В C# импорт класса в другой класс не работает

Я совершенно новичок в C# и сделал класс, который я хотел бы использовать в своем основном классе. Эти два класса в разных файлах, но когда я пытаюсь импортировать один в другой с using, КМД говорит, говорит

не удалось найти тип или имя пространства имен "MyClass" (отсутствует директива using или ссылка на сборку?

Я знаю, что на 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 { } и импортировать это, но это тоже не работает.

9 ответов


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

Я знаю, что это очень старый вопрос, но у меня было такое же требование и только что обнаружил, что после c#6 Вы можете использовать static в использовании для классов для импорта.

надеюсь, это кому-то поможет....

using static yourNameSpace.YourClass;

Ну, что вам нужно "импортировать" (использовать), это пространство имен MyClass не само имя класса. Если оба класса находятся в одном пространстве имен, вам не нужно "импортировать" его.

определение MyClass.cs

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

использование AnotherClass.cs

using Ns1;

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

Если другой класс скомпилирован как библиотека (т. е. 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" /> 
    

ваш класс теперь появится и будет вести себя как часть проекта. Использование не требуется. Это может быть сделано несколько файлов в одном кадре.


MyClass это класс не пространство имен. Итак, этот код неверен:

using MyClass //THIS CODE IS NOT CORRECT

вы должны проверить пространство имен MyClass (e.g: 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();
    }
}

Если они являются отдельными файлами классов в одном проекте, то вам не нужно иметь оператор 'import'. Просто используй класс прямо сейчас. Если файлы находятся в отдельных проектах, сначала необходимо добавить ссылку на проект, прежде чем можно будет использовать инструкцию "import".


namespace MyNamespace
{
    public class MyMainClass
    {
        static void Main()
        {
            MyClass test = new MyClass();
        }
    }

    public class MyClass
    {
        void Stuff()
        {

        }
    }
}

вам не нужно использовать пространство имен, потому что оно все включено в то же пространство имен.

Если вы не знаете, какое пространство имен находится в вашем классе, введите класс (с учетом регистра, который вы хотите использовать), затем с помощью курсора на классе используйте CTRL + . и он предложит вам ручной импорт.


единственное, что вы можете сделать, это соединить их в одном пространстве имен. Тогда вам не нужно импортировать его. Вы можете получить к нему прямой доступ.

using System;
namespace MyNamespace
{
    public class SampleClass1
    {
        //Can access SampleClass2 here
    }
}


using System;
namespace MyNamespace
{
    public class SampleClass2
    {
        //Can access SampleClass1 here
    }
}

using System;
namespace MyNamespace
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            //Can access both of above classes
        }
    }
}