为了避免重复定义,我试图将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();
...
}
在得知Java 'packages'
在C#中被命名为'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();
...
}
}
}
我尝试了许多不同的命名约定,但仍然会遇到相同的错误。你能告诉我我做错了什么吗?
看起来你想要一个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
引用类或分部类。