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# 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 合并到项目中,并且命名空间已经相同,则可以:
- 关闭您的解决方案,
-
打开 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
的命名空间(例如: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
+ .
,它将为您提供手动导入。