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