C# #在C中包含指令#

C# #在C中包含指令#,c#,C#,有替代品吗?如果有,指令将如何查找名为“class.cs”的文件? 我只想为每个类将代码拆分成一个文件。查看否,没有替代的#include语句。C#是一种面向对象的语言,其中代码被组织成类。您可以根据其可见性在另一个类中使用一个类中的代码,并且可以使用分部类将代码从单个类分割到多个源文件中。这些基本上是您在另一个“文件”中使用一个“文件”中的代码的方式。但这根本不是一回事。你的意思有点不清楚。但你是否在考虑: using MyNamespace; p>与C中的C或C++不同,不需要使用包含在

有替代品吗?如果有,指令将如何查找名为“class.cs”的文件?
我只想为每个类将代码拆分成一个文件。

查看否,没有替代的#include语句。C#是一种面向对象的语言,其中代码被组织成类。您可以根据其可见性在另一个类中使用一个类中的代码,并且可以使用分部类将代码从单个类分割到多个源文件中。这些基本上是您在另一个“文件”中使用一个“文件”中的代码的方式。但这根本不是一回事。

你的意思有点不清楚。但你是否在考虑:

using MyNamespace;
<> p>与C中的C或C++不同,不需要使用包含在其他文件中定义的类型。而C#则基于类或名称空间等容器进行类型解析。只要编译中包含这两个文件,并且在中使用了第二种类型的名称空间,那么您的类就可以访问

例如:

类别1.cs

namespace Project1 { 
 class Class1 { ... }
}
类别2.cs

namespace Project1 {
  class Class2 {
    private Class1 m_field1;
    ..
  }
}
这与C的include指令并不完全相同,但C是您所追求的:

using Assembly.Name;
它在名称空间级别而不是文件级别工作。因此,如果
class.cs
Application.Core
命名空间中包含一个名为
SomeClass
的公共类,则如下所示:

using Application.Core;
这通常放在您正在使用的文件的顶部,并允许该类将
SomeClass
用作对象(以及
Application.Core
命名空间中的所有其他公共类)


当然,如果类都在同一名称空间中(例如,
Application.Core
),则根本没有理由使用
using
语句。同一名称空间中的类可以在没有任何声明的情况下相互解析。

您需要将class.cs的内容放入名称空间中。然后在需要查看class.cs的文件顶部放置一个using语句

class.cs
namespace Class {
//class.cs stuff
}
然后在需要类的文件中执行以下操作

  using Class;
另外,别忘了C#分部类有一些功能,否则您可能会使用#include语句获得这些功能


分部类允许您将类定义拆分为多个文件。

如果您使用的是msbuild或csc(C#编译器)命令行,则在*.csproj中包含每个文件:

csc File1.cs File2.cs

在C#中实现元编程(超越泛型)的惯用方法是使用T4模板-Visual Studio和MSBuild支持T4内置,但是VS不附带T4语法着色-您需要第三方加载项

为了演示T4的
include
功能,我将使用希望在不使用继承的情况下同时向多个类添加
=
操作符重载的场景

比较之下,C++中的情况是这样的:

public partial class Foo {

    public static operator==(Foo x, Foo y) {
       if( x == null && y != null ) return false;
       return x.Equals( y );
   }
}

public partial class Bar {

   public static operator==(Bar x, Bar y) {
       if( x == null && y != null ) return false;
       return x.Equals( y );
   }
}
OperatorEquals公司 代码.h 在C#中,您可以执行以下操作:

  • 使用
    partial
    类,以便所有非元编程逻辑(即普通C#code)都在一个文件中,例如
    Foo.cs
    Bar.cs
  • 在项目中创建新的T4模板,将输出文件扩展名更改为
    .cs
  • 在T4(
    *.tt
    )文件中创建第二个相同类型的
    分部类定义,但不需要突出显示C#语法
  • 定义包含的文件:
  • Operators.inc.cs.t4 请注意,此场景是人为设计的-如果您确实想添加
    操作符==
    (以及所有其他操作符:
    IEquatable
    操作符!=
    IComparable
    ,等等),那么您可能会使用T4渲染函数而不是include,因为这使参数化更加直观,并使所有内容都包含在单个文件中:

    T4RenderFunction.tt
    
    公共部分类Foo{
    }
    公共部分类酒吧{
    }
    公共静态运算符==(左、右){
    返回。等于(左、右);
    }
    公共覆盖布尔等于(其他){
    返回。等于(这个,其他);
    }
    公共静态布尔等于(lhs、rhs){
    //T4可以使用VS DTE枚举“typeName”的成员,但您最好手动实现此方法
    }
    公共静态操作员=(左、右){
    返回!.Equals(左、右);
    }
    //等等。。。
    
    使用
    部分类的示例

    Main.cs

    partial class Program
    {
        private static void Main()
        {
            A();
            B();
        }
    }
    
    partial class Program
    {
        private static void A() => Console.WriteLine("A");
    }
    
    partial class Program
    {
        private static void B() => Console.WriteLine("B");
    }
    
    fileA.cs

    partial class Program
    {
        private static void Main()
        {
            A();
            B();
        }
    }
    
    partial class Program
    {
        private static void A() => Console.WriteLine("A");
    }
    
    partial class Program
    {
        private static void B() => Console.WriteLine("B");
    }
    
    fileB.cs

    partial class Program
    {
        private static void Main()
        {
            A();
            B();
        }
    }
    
    partial class Program
    {
        private static void A() => Console.WriteLine("A");
    }
    
    partial class Program
    {
        private static void B() => Console.WriteLine("B");
    }
    

    如果两个类位于同一命名空间中,则不需要。提及部分类时+1。。令人惊讶的是,其他答案中没有一个包含这一点。-1完全没有抓住要点。问题是要求一个指令,相当于C++中的<>代码>,而该指令是<>代码>使用< /Cord>语句。此外,C语言与C++一样面向对象(Read:根本不)。这两种语言都允许开发人员编写面向对象的代码。但无论如何,这与问题完全无关。