当前位置: 首页 > 编程语言 > C#

C#中的#include指令分享

时间:2023-04-10 17:10:33 C#

#C#中的#include指令有替代方案吗?如果是这样,该指令将如何查找名为“class.cs”的文件?我只想将代码拆分为每个类的文件。不,#include语句没有替代品。C#是一种面向对象的语言,其中代码被组织到类中。您可以根据其可见性在另一个类中使用一个类的代码,并且可以使用部分类将代码从一个类拆分到多个源文件中。这些基本上就是您在另一个“文件”中使用代码的方式。但这根本不是一回事。在C#中实现元编程的惯用方法(超越泛型)是使用T4模板——VisualStudio和MSBuild支持内置的T4,但VS没有T4语法着色——你需要一个第三方插件。为了演示T4的包含功能,我将使用这样的场景:您希望在不使用继承的情况下同时向多个类添加==运算符重载。为了比较,在C++中它会是这样的:返回lhs.Equals(rhs);}Code.hclassFoo{public:#defineTYPEFoo#include"OperatorEquals.inc"}classBar{public:#defineTYPEBar#include"OperatorEquals.inc"}在C#中,你会这样做:所有非元编程逻辑(即纯C#代码)都在一个文件中,例如Foo.cs和Bar.cs在项目中创建一个新的T4模板,将输出文件名更改扩展为.cs在该T4(*.tt)文件中创建相同类型的第二个部分类定义,但你不会使用C#语法突出显示。定义包含文件:Operators.inc.cs.t4publicstaticoperator==(x,y){if(x==null&&y!=null)returnfalse;返回x.Equals(y);}将此添加到您的T4模板:Metaprogramming.ttpublicpartialclassFoo{}publicpartialclassBar{}无论何时“保存”.tt文件(即使您没有进行任何更改),VS都会重新生成输出。cs文件如下所示:publicpartialclassFoo{publicstaticoperator==(Foox,Fooy){if(x==null&&y!=null)returnfalse;返回x.Equals(y);}}publicpartialclassBar{publicstaticoperator==(Barx,Bary){if(x==null&&y!=null)returnfalse;返回x.Equals(y);请注意,这种情况是设计使然——如果您确实想要添加operator==(以及所有其他operator==:IEquatable、operator!=、IComparable等),那么您可能会使用T4渲染函数而不是包括,因为这使参数化更直接,并将所有内容保存在一个文件中:;}publicoverrideBooleanEquals(other){return.Equals(this,other);}发布icstaticBooleanEquals(lhs,rhs){//T4可以使用VSDTE枚举`typeName`的成员,但您最好手动实现此方法}publicstaticoperator!=(lhs,rhs){return!.Equals(左轴,右轴);}//等等...另外,不要忘记C#分部类具有一些您可以通过#include语句获得的功能分部类允许您将类定义拆分到多个文件中。与C#中的C或C++不同,使用其他文件中定义的类型不需要#include。相比之下,C#的类型解析基于类或命名空间等容器。只要这两个文件都包含在编译中并且第二种类型的命名空间可用,那么您的类就可以访问。示例:Class1.cs命名空间Project1{classClass1{...}}Class2.cs命名空间Project1{classClass2{privateClass1m_field1;..}}你的意思有点不清楚。但是您正在考虑:使用MyNamespace;如果使用msbuild或在csc(C#编译器)命令行中,请参阅使用声明将每个文件包含在*.csproj中:cscFile1.csFile2.cshttp://msdn.microsoft.com/en-us/library/78f4aasd%28VS.80%29.aspx它与C的#include指令并不完全相同,但C#的using语句正是您所追求的:usingAssembly.Name;它在名称空间级别而不是文件级别工作。因此,如果class.cs在Application.Core命名空间中包含一个名为SomeClass的公共类,它看起来像:这通常放在您正在使用的文件的顶部,并允许该类将SomeClass用作对象(以及Application.Core命名空间中的所有其他公共类)。当然,如果这些类都在同一个命名空间中(例如Application.Core),那么根本没有理由使用using语句。同一命名空间中的类可以在没有任何声明的情况下相互解析。您需要将class.cs的内容放入命名空间。然后在需要看class.cs的文件顶部放一条using语句。class.csnamespaceClass{//class.csstuff}然后在需要类的文件中进行如下操作。使用类;使用部分类的示例。Main.cs部分类程序{privatestaticvoidMain(){A();B();}}fileA.cspartialclassProgram{privatestaticvoidA()=>Console.WriteLine("A");}fileB.cs以上就是C#学习教程:C##include指令分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——partialclassProgram{privatestaticvoidB()=>Console.WriteLine("B");}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: