我对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 { }
包含我的非主要类并导入它,但它也不起作用。
答案 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合并到项目中,并且命名空间已经相同,您可以:
打开 YourProjectName.csproj 文件,然后查找此部分:
<ItemGroup>
<Compile Include="ExistingClass1.cs" />
<Compile Include="ExistingClass2.cs" />
...
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
检查要添加的.cs文件是否在项目文件夹中(与解决方案中所有现有类相同的文件夹)。
如下所示添加条目,保存并打开项目。
<Compile Include="OtherClassFile.cs" />
您的课程现在将出现并作为项目的一部分。不需要使用。这可以一次完成多个文件。
答案 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
}
}
}