В 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 в ваш проект, и пространство имен уже идентично, вы можете:
- закройте свое решение,
-
открыть YourProjectName.csproj файл файл, и посмотрите на это раздел:
<ItemGroup> <Compile Include="ExistingClass1.cs" /> <Compile Include="ExistingClass2.cs" /> ... <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup>
проверяем, что .cs-файл, который вы хотите добавить, находится в папке проекта (той же папке, что и все существующие классы в решении).
-
добавить запись внутри, как показано ниже, сохраните и откройте проект.
<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
}
}
}