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

时间:2013-02-06 11:52:24

标签: c# class main

我对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 { }包含我的非主要类并导入它,但它也不起作用。

9 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:14)

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

我希望这有助于某人......

using static yourNameSpace.YourClass;

答案 2 :(得分:3)

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

定义MyClass.cs

namespace Ns1
{
    public class MyClass
    {
        ...
    }
}

用法AnotherClass.cs

using Ns1;

namespace AnotherNs
{
    public class AnotherClass
    {
        public AnotherClass()
        {
            var myInst = new MyClass();
        }
    }
}

答案 3 :(得分:1)

如果将另一个类编译为库(即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>
    
  3.    
    1. 检查要添加的.cs文件是否在项目文件夹中(与解决方案中所有现有类相同的文件夹)。

    2. 如下所示添加条目,保存并打开项目。

      <Compile Include="OtherClassFile.cs" /> 
      
    3. 您的课程现在将出现并作为项目的一部分。不需要使用。这可以一次完成多个文件。

答案 4 :(得分:0)

namespace MyNamespace
{
    public class MyMainClass
    {
        static void Main()
        {
            MyClass test = new MyClass();
        }
    }

    public class MyClass
    {
        void Stuff()
        {

        }
    }
}

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

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

答案 5 :(得分:0)

MyClass,不是名称空间。所以这段代码错了:

using MyClass //THIS CODE IS NOT CORRECT

您应该检查MyClass的命名空间(例如:MyNamespace)。然后以适当的方式调用它:

MyNamespace.MyClass myClass =new MyNamespace.MyClass();

答案 6 :(得分:0)

using用于导入名称空间而不是类。

因此,如果您的类位于命名空间X

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

         }
    }
}

然后在你想要它的另一个命名空间中使用它

using System;
using X;

public class MyMainClass {
    static void Main() {
        MyClass test = new MyClass();
    }
}

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

您唯一能做的就是将它们放在同一个命名空间中。然后,您无需导入它。您可以直接访问它。

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
        }
    }
}