3, GenerateCodeFromMember方法 |
||||||||||||||||||
MSDN描述:为指定的代码文档对象模型 (CodeDOM) 成员声明生成代码,并使用指定的选项将代码发送到指定的文本编写器。 通俗理解:将类的各种类型成员输出为代码字符串 |
||||||||||||||||||
a, CodeMemberField表示某种类型的字段的声明。 |
||||||||||||||||||
CodeMemberField ret = new CodeMemberField(); ret.Type = new CodeTypeReference(typeof(Int32)); ret.Attributes = MemberAttributes.Private; ret.Name = "m_Number"; codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为:private int m_Number; |
||||||||||||||||||
为字段上加注释 |
||||||||||||||||||
CodeMemberField ret = new CodeMemberField(); ret.Type = new CodeTypeReference(typeof(Int32)); ret.Attributes = MemberAttributes.Private; ret.Name = "m_Number"; ret.Comments.Add(new CodeCommentStatement("这是一个测试用的字段", true)); codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为: /// 这是一个测试用的字段 private int m_Number; |
||||||||||||||||||
为字段加上属性描述 |
||||||||||||||||||
CodeMemberField ret = new CodeMemberField(); ret.Type = new CodeTypeReference(typeof(Int32)); ret.Attributes = MemberAttributes.Private; ret.Name = "m_Number"; ret.Comments.Add(new CodeCommentStatement("这是一个测试用的字段", true)); CodeExpression constBool = new CodePrimitiveExpression(true); CodeAttributeArgument attrArg = new CodeAttributeArgument(constBool); CodeTypeReference attrType = new CodeTypeReference(typeof(SerializableAttribute)); CodeAttributeDeclaration attribute = new CodeAttributeDeclaration(attrType, attrArg); ret.CustomAttributes.Add(attribute); codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为: /// 这是一个测试用的字段 [System.SerializableAttribute(true)] private int m_Number; |
||||||||||||||||||
为字段加上初始化 |
||||||||||||||||||
CodeMemberField ret = new CodeMemberField(); ret.Type = new CodeTypeReference(typeof(Int32)); ret.Attributes = MemberAttributes.Private; ret.Name = "m_Number"; ret.Comments.Add(new CodeCommentStatement("这是一个测试用的字段", true)); CodeExpression constBool = new CodePrimitiveExpression(true); CodeAttributeArgument attrArg = new CodeAttributeArgument(constBool); CodeTypeReference attrType = new CodeTypeReference(typeof(SerializableAttribute)); CodeAttributeDeclaration attribute = new CodeAttributeDeclaration(attrType, attrArg); ret.CustomAttributes.Add(attribute); ret.InitExpression = new CodePrimitiveExpression(100); codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为: /// 这是一个测试用的字段 [System.SerializableAttribute(true)] private int m_Number = 100; |
||||||||||||||||||
b, CodeMemberEvent表示一个类型的事件的声明。 |
||||||||||||||||||
CodeMemberEvent ret = new CodeMemberEvent(); ret.Attributes = MemberAttributes.Public; ret.Name = "Click"; ret.Type =new CodeTypeReference (typeof (EventHandler<EventArgs>)); codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为: public event System.EventHandler<System.EventArgs> Click; |
||||||||||||||||||
为事件加上注释 |
||||||||||||||||||
CodeMemberEvent ret = new CodeMemberEvent(); ret.Attributes = MemberAttributes.Public; ret.Name = "Click"; ret.Type =new CodeTypeReference (typeof (EventHandler<EventArgs>)); ret.Comments.Add(new CodeCommentStatement("这是一个Click事件",true)); codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为: /// 这是一个Click事件 public event System.EventHandler<System.EventArgs> Click; |
||||||||||||||||||
为事件加上属性 |
||||||||||||||||||
CodeMemberEvent ret = new CodeMemberEvent(); ret.Attributes = MemberAttributes.Public; ret.Name = "Click"; ret.Type =new CodeTypeReference (typeof (EventHandler<EventArgs>)); ret.Comments.Add(new CodeCommentStatement("这是一个Click事件",true)); CodeExpression constBool = new CodePrimitiveExpression(true); CodeAttributeArgument attrArg = new CodeAttributeArgument(constBool); CodeTypeReference attrType = new CodeTypeReference(typeof(SerializableAttribute)); CodeAttributeDeclaration attribute = new CodeAttributeDeclaration(attrType, attrArg); ret.CustomAttributes.Add(attribute); codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为: /// 这是一个Click事件 [System.SerializableAttribute(true)] public event System.EventHandler<System.EventArgs> Click; |
||||||||||||||||||
备注:以下两个成员我还没有搞清楚起什么作用,msdn上说的也不清楚,有人清楚的话请告诉我,谢谢 QQ:32354456 Email:diablohe@hotmail.com ret.PrivateImplementationType = new CodeTypeReference(typeof(double)); ret.ImplementationTypes.Add(new CodeTypeReference(typeof(int))); |
||||||||||||||||||
c, CodeMemberMethod表示某种类型的方法的声明。 |
||||||||||||||||||
CodeMemberMethod ret = new CodeMemberMethod(); ret.Attributes = MemberAttributes.Public; ret.Name = "DoSomething"; ret.ReturnType =new CodeTypeReference (typeof (int)); codeProvider.GenerateCodeFromMember(ret, tw, options); 输出的代码字符串为: public virtual int DoSomething() { } |
||||||||||||||||||
注意到MemberAttributes.Public直接对应了public virtual,有些奇怪 这里有必要先穿插研究下MemberAttributes的各种标志的用法 |
||||||||||||||||||
c.1MemberAttributes定义类成员的成员属性标识符。 Msdn描述:
|
微软CodeDom模型学习笔记(三)
最新推荐文章于 2016-05-19 10:49:13 发布
本文为微软CodeDom模型的学习笔记,重点探讨了构造函数(constructor)、类(class)、属性(attributes)、程序集(assembly)以及参数(parameters)的使用和实现细节。
摘要由CSDN通过智能技术生成