为避免重复定义,我尝试将internal function prototypes
从类One
移动到C#using My.Class.One
指令(如Java中的import My.Class.One
)。
在Java中,这会改变这段代码:
public class One {
public static void func1();
public static void func2();
public static int main(String[] args) { ... }
}
...将该代码分成不同的文件:
import My.Include;
public class One {
public static int Main(String[] args) { ... }
}
------------------------->8--------------------------------
package Include;
public class My {
public static void func1();
public static void func2();
...
}
在得知C#中将'packages'
命名为'namespaces'
之后,我想出了以下C#代码,这些代码无法编译(mcs One.cs My_include.cs -out:One.exe
)并出现错误:
> “错误CS0103:当前上下文中不存在名称`func1'”
using System;
using My.Include;
public class One {
public static int Main(String[] args) { return funct1(); }
}
------------------------->8--------------------------------
using System;
namespace My {
namespace Include {
public class functions {
public static void func1();
public static void func2();
...
}
}
}
我尝试了许多不同的命名约定,但我仍然得到同样的错误。你能告诉我我做错了吗?
答案 0 :(得分:1)
看起来你想要一个partial class
,所以你的主类文件看起来像:
// File: One.cs
using System;
public class One
{
static void Main()
{
// Your Main method here
}
}
你会得到第二个文件,如下所示:
// File: One.Externs.cs
using System;
public partial class One
{
extern static void func1();
extern static void func2();
}
在编译时,编译器会自动将这两个(或更多)文件合并为一个类。这为您提供了您正在寻找的分离,但将相关定义保留在正确的范围内。
using
指令只是java的import
指令的部分同义词 - 在C#using
中只提供namespace
的快捷方式,而您习惯于指代具有import
的班级或部分班级。