Подтвердить что ты не робот

С# импортирующий класс в другой класс не работает

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

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

Я знаю, что в Java я должен возиться с CLASSPATH, чтобы заставить работать такие вещи, но я понятия не имею о С#.

Дополнительная информация:

Как вы, наверное, выяснили, я компилирую и выполняю через командную строку. Я компилирую мой не основной класс с помощью /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 { } и импортировать его, но он тоже не работает.

4b9b3361

Ответ 1

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

Ответ 2

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

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

using static yourNameSpace.YourClass;

Ответ 3

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

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

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

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

using Ns1;

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

Ответ 4

Если другой класс скомпилирован как библиотека (т.е. dll), и вам это нужно, вы должны добавить ссылку из visual studio, просмотреть и указать на файл dll.

Если вы хотите включить OtherClassFile.cs в свой проект, а пространство имен уже идентично, вы можете:

  • Закройте свое решение,
  • Откройте файл YourProjectName.csproj и найдите этот раздел:

    <ItemGroup>                                            
        <Compile Include="ExistingClass1.cs" />                     
        <Compile Include="ExistingClass2.cs" />                                 
        ...
        <Compile Include="Properties\AssemblyInfo.cs" />     
    </ItemGroup>
    
 
  • Убедитесь, что файл .cs, который вы хотите добавить, находится в папке проекта (той же папке, что и все существующие классы в решении).

  • Добавьте запись внутри, как показано ниже, сохраните и откройте проект.

    <Compile Include="OtherClassFile.cs" /> 
    

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

Ответ 5

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

    public class MyClass
    {
        void Stuff()
        {

        }
    }
}

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

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

Ответ 6

MyClass - это класс не пространство имен. Так что этот код неправильный:

using MyClass //THIS CODE IS NOT CORRECT

Вы должны проверить пространство имен MyClass (например: MyNamespace). Затем назовите его соответствующим образом:

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

Ответ 7

using используется для импорта пространств имен, а не классов.

Итак, если ваш класс находится в пространстве имен X

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

         }
    }
}

затем использовать его в другом пространстве имен, в котором вы хотите его

using System;
using X;

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

Ответ 8

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

Ответ 9

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

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
        }
    }
}