C# 将类导入另一个类不起作用

本文关键字:不起作用 另一个 导入 | 更新日期: 2023-09-27 17:57:50

我对C#很陌生,并且已经制作了一个我想在我的主类中使用的类。这两个类在不同的文件中,但是当我尝试使用 using 将一个导入另一个时,cmd 说

找不到类型或命名空间名称"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 { }来包含我的非主类并导入它,但它也不起作用。

C# 将类导入另一个类不起作用

更新:从 C# 6 开始,如果要在不指定类名的情况下使用类的静态成员,可以使用 using static 指令将静态成员导入当前范围,如下所示:

using static MyNamespace.MyClass;

虽然这不是原始问题的内容,但您会遇到与 OP 类似的错误,因此为了完整性,我提供了它。

回答OP的问题

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

编辑:以下是文件的外观:

我的类.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 之后,您可以使用静态来用于导入类。

我希望这对某人有所帮助。

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

如果它们是同一项目中单独的类文件,则不需要具有"import"语句。 只需直接使用该类即可。 如果文件位于单独的项目中,则需要先添加对项目的引用,然后才能对其使用"import"语句。

如果另一个类被编译为库(即 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的命名空间(例如: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();
    }
}
namespace MyNamespace
{
    public class MyMainClass
    {
        static void Main()
        {
            MyClass test = new MyClass();
        }
    }
    public class MyClass
    {
        void Stuff()
        {
        }
    }
}

您不需要使用命名空间,因为它都包含在同一个命名空间中。

如果您不确定您的类位于哪个命名空间,请键入类(您希望使用区分大小写(,然后将光标放在该类上,使用 CTRL + .,它将为您提供手动导入。