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

Blu*_*ire 18 c# program-entry-point class

我对C#很新,并且已经创建了一个我想在我的主类中使用的类.usingcmd说,这两个类在不同的文件中,但当我尝试将一个类导入到另一个文件中时

找不到类型或命名空间名称"MyClass"(您是否缺少using指令或程序集引用?

我知道在Java中我不得不搞砸CLASSPATH这样的事情,但我不知道C#.

额外细节:

你可能已经想到了,我正在编译并通过命令提示符执行.我正在编译我的非主类/target:library(我听说只有主类应该是.exe文件).

我的代码看起来像这样:

public class MyClass {
    void stuff() {

    }
}
Run Code Online (Sandbox Code Playgroud)

和我的主要课程:

using System;
using MyClass;

public class MyMainClass {
    static void Main() {
        MyClass test = new MyClass();
        /* Doesn't work */
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图用我的非主类包含namespace MyNamespace { }并导入它,但它也不起作用.

Ale*_*lex 27

using仅用于名称空间 - 如果两个类都在同一名称空间中,则只删除using.

编译.exe时,必须引用在第一步中创建的程序集:

csc /t:library /out:MyClass.dll MyClass.cs
csc /reference:MyClass.dll /t:exe /out:MyProgram.exe MyMainClass.cs
Run Code Online (Sandbox Code Playgroud)

如果只是将文件编译在一起,可以使事情更简单:

csc /t:exe /out:MyProgram.exe MyMainClass.cs MyClass.cs
Run Code Online (Sandbox Code Playgroud)

要么

csc /t:exe /out:MyProgram.exe *.cs
Run Code Online (Sandbox Code Playgroud)

编辑:这是文件应该是这样的:

MyClass.cs:

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

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MyMainClass.cs:

using System;

namespace MyNamespace {
    public class MyMainClass {
        static void Main() {
            MyClass test = new MyClass();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案,因为它实际上提供了用于编译的命令行。原始海报将必须决定他是否想要在两个单独的程序集中的类(将一个类编译为库(DLL),然后参考第一次编译的 DLL 将第二个类编译为可执行文件)还是只在一个程序集中(使用两个文件编译一次) )。这是许多人通过在 Visual Studio 中拥有“项目”来管理的事情,其中​​项目相互引用(以非循环方式)并且每个项目可以包含一个或多个代码文件。 (2认同)

Jac*_*nan 20

我知道这是一个非常古老的问题,但我有同样的要求,并且发现在c#6之后你可以使用静态来导入类.

我希望这可以帮助别人....

using static yourNameSpace.YourClass;
Run Code Online (Sandbox Code Playgroud)


DHN*_*DHN 5

那么您必须“导入”(使用)的是名称空间而MyClass不是类名本身。如果两个类都在同一个命名空间中,则不必“导入”它。

定义 MyClass.cs

namespace Ns1
{
    public class MyClass
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

用法 AnotherClass.cs

using Ns1;

namespace AnotherNs
{
    public class AnotherClass
    {
        public AnotherClass()
        {
            var myInst = new MyClass();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)