深入浅出.NET代码生成系列(1):概述

前端之家收集整理的这篇文章主要介绍了深入浅出.NET代码生成系列(1):概述前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Visual Studio之所以强大,就因为它能为开发者尽可能地生成一些代码,免去了我们经常性去做一些无意义的,机械化的操作,从而使开发者不必把时间和精力都花在细枝末节上,能更专心于程序的核心部分,开发效率也大大提高。

说到这代码生成,实话说,在日常的开发任务中,似乎使用的频率不高,而且,动态编译也有一个消耗性能的过程。

那么,我们需要对代码生成有点了解吗?应该说是有这个需要的,说不定哪一天会用得上。有时候,我会发现VS的代码生成功能未必能满足我的需求,这时候,我也会考虑自己写一个代码生成工具。

.NET的类库也提供了支持,虽然不能说所有代码都可以生成,至少常用的大部分代码是没有问题的。

代码生成难学习吗?哈,有点吧,但不能说得上很难,重要的是,语言基础要过得关,你懂得如何写代码,才能知道怎么生成代码

先不进行任何介绍,我们先来看一个例子,直观地认识一下如何生成代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.CodeDom;
  6. using System.CodeDom.Compiler;
  7.  
  8. namespace ConsoleApplication1
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. // 声明一个命名空间
  15. CodeNamespace MyNameSpace = new CodeNamespace("MyApp");
  16. // 引用其它命名空间
  17. MyNameSpace.Imports.AddRange(new CodeNamespaceImport[] {
  18. new CodeNamespaceImport("System"),new CodeNamespaceImport("System.Collections"),new CodeNamespaceImport("System.Data"),new CodeNamespaceImport("System.Text")
  19. });
  20. // 声明一个类
  21. CodeTypeDeclaration MyClass = new CodeTypeDeclaration("MyTestClass");
  22. // 定义Main入口点方法
  23. CodeEntryPointMethod MyEntryPoint = new CodeEntryPointMethod();
  24. // Main方法应为public static
  25. MyEntryPoint.Attributes = MemberAttributes.Public | MemberAttributes.Static;
  26. // Main方法返回类型为void
  27. MyEntryPoint.ReturnType = new CodeTypeReference(typeof(void));
  28. // Main方法中的代码
  29. MyEntryPoint.Statements.Add(new CodeMethodInvokeExpression(
  30. new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(typeof(Console)),"WriteLine"),new CodePrimitiveExpression("Hello,我的应用程序。")));
  31. // 将方法添加到类中
  32. MyClass.Members.Add(MyEntryPoint);
  33. // 将类添加到命名空间
  34. MyNameSpace.Types.Add(MyClass);
  35. // 创建代码单元
  36. CodeCompileUnit MyUnit = new CodeCompileUnit();
  37. // 将命名空间添加代码单元中
  38. MyUnit.Namespaces.Add(MyNameSpace);
  39. // 创建代码生成类-C#
  40. CodeDomProvider ProviderCS = CodeDomProvider.CreateProvider("C#");
  41. // 生成代码
  42. ProviderCS.GenerateCodeFromCompileUnit(MyUnit,Console.Out,new CodeGeneratorOptions { BracingStyle = "C" });
  43. // 生成VB.NET代码
  44. CodeDomProvider ProviderVB = CodeDomProvider.CreateProvider("vb");
  45. ProviderVB.GenerateCodeFromCompileUnit(MyUnit,new CodeGeneratorOptions());
  46.  
  47. Console.ReadKey();
  48. }
  49. }
  50. }


把这个程序运行一下,我们看到两段代码,第一段是C#代码,第二段是VB.NET代码

大家可能看上面的代码,有点云里雾里,不过别急,这个例子只是让各位对代码生成有个整体认识罢了,在后面的文章中,我会尽可能地对每一个知识点进行说明,并且每个要点都会有很简单的示例辅助理解。

猜你在找的VB相关文章