C# #在C中包含指令#
有替代品吗?如果有,指令将如何查找名为“class.cs”的文件?C# #在C中包含指令#,c#,C#,有替代品吗?如果有,指令将如何查找名为“class.cs”的文件? 我只想为每个类将代码拆分成一个文件。查看否,没有替代的#include语句。C#是一种面向对象的语言,其中代码被组织成类。您可以根据其可见性在另一个类中使用一个类中的代码,并且可以使用分部类将代码从单个类分割到多个源文件中。这些基本上是您在另一个“文件”中使用一个“文件”中的代码的方式。但这根本不是一回事。你的意思有点不清楚。但你是否在考虑: using MyNamespace; p>与C中的C或C++不同,不需要使用包含在
我只想为每个类将代码拆分成一个文件。查看否,没有替代的#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
.cs
*.tt
)文件中创建第二个相同类型的分部类定义,但不需要突出显示C#语法
操作符==
(以及所有其他操作符: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:根本不)。这两种语言都允许开发人员编写面向对象的代码。但无论如何,这与问题完全无关。