定义自定义单声道"using"指令,如Java "import"



为了避免重复定义,我试图将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引用类或分部类。

相关内容

最新更新