手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#在运行时动态创建类型的实现方法
C#在运行时动态创建类型的实现方法
摘要:本文实例讲述了C#在运行时动态创建类型的实现方法。是C#项目开发中很实用的技巧。分享给大家供大家参考。具体分析如下:具体来说,C#在运行时动...

本文实例讲述了C#在运行时动态创建类型的实现方法。是C#项目开发中很实用的技巧。分享给大家供大家参考。具体分析如下:

具体来说,C# 在运行时动态的创建类型是通过动态生成C#源代码,然后通过编译器编译成程序集的方式实现动态创建类型的。

主要功能代码如下:

public static Assembly NewAssembly() { //创建编译器实例。 provider = new CSharpCodeProvider(); //设置编译参数。 cp = new CompilerParameters(); cp.GenerateExecutable = false; cp.GenerateInMemory = true; // Generate an executable instead of // a class library. //cp.GenerateExecutable = true; // Set the assembly file name to generate. cp.OutputAssembly = "c:1.dll"; // Generate debug information. cp.IncludeDebugInformation = true; // Save the assembly as a physical file. cp.GenerateInMemory = false; // Set the level at which the compiler // should start displaying warnings. cp.WarningLevel = 3; // Set whether to treat all warnings as errors. cp.TreatWarningsAsErrors = false; // Set compiler argument to optimize output. cp.CompilerOptions = "/optimize"; cp.ReferencedAssemblies.Add("System.dll"); //cp.ReferencedAssemblies.Add("System.Core.dll"); cp.ReferencedAssemblies.Add("System.Data.dll"); //cp.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll"); cp.ReferencedAssemblies.Add("System.Deployment.dll"); cp.ReferencedAssemblies.Add("System.Design.dll"); cp.ReferencedAssemblies.Add("System.Drawing.dll"); cp.ReferencedAssemblies.Add("System.Windows.Forms.dll"); //创建动态代码。 StringBuilder classSource = new StringBuilder(); classSource.Append("using System;using System.Windows.Forms;npublic class DynamicClass: UserControl n"); classSource.Append("{n"); classSource.Append("public DynamicClass()n{nInitializeComponent();nConsole.WriteLine("hello");}n"); classSource.Append( "private System.ComponentModel.IContainer components = null;nprotected override void Dispose(bool disposing)n{n"); classSource.Append( "if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);n}n"); classSource.Append( "private void InitializeComponent(){nthis.SuspendLayout();this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);"); classSource.Append( "this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.Name = "DynamicClass";this.Size = new System.Drawing.Size(112, 74);this.ResumeLayout(false);n}"); //创建属性。 /*************************在这里改成需要的属性******************************/ classSource.Append(propertyString("aaa")); classSource.Append(propertyString("bbb")); classSource.Append(propertyString("ccc")); classSource.Append("}"); System.Diagnostics.Debug.WriteLine(classSource.ToString()); //编译代码。 CompilerResults result = provider.CompileAssemblyFromSource(cp, classSource.ToString()); if (result.Errors.Count > 0) { for( int i = 0; i < result.Errors.Count; i ++) Console.WriteLine(result.Errors[ i]); Console.WriteLine("error"); return null; } //获取编译后的程序集。 Assembly assembly = result.CompiledAssembly; return assembly; } private static string propertyString(string propertyName) { StringBuilder sbProperty = new StringBuilder(); sbProperty.Append(" private int _" + propertyName + " = 0;n"); sbProperty.Append(" public int " + "" + propertyName + "n"); sbProperty.Append(" {n"); sbProperty.Append(" get{ return _" + propertyName + ";} n"); sbProperty.Append(" set{ _" + propertyName + " = value; }n"); sbProperty.Append(" }"); return sbProperty.ToString(); }

希望本文所述对大家的C#程序设计有所帮助

【C#在运行时动态创建类型的实现方法】相关文章:

C#连接Oracle数据库的实例方法

解决C# 截取当前程序窗口指定位置截图的实现方法

C# 获取属性名的方法

c# asp .net 动态创建sql数据库表的方法

C# 向二进制文件进行读写的操作方法

基于c#图像灰度化、灰度反转、二值化的实现方法详解

C#获取进程的主窗口句柄的实现方法

C# 屏蔽关键字的实现方法

C#动态执行字符串(动态创建代码)的实例代码

C#调用Java类的实现方法

精品推荐
分类导航