.net 我需要编写什么代码来生成此代码?
我需要这样做.net 我需要编写什么代码来生成此代码?,.net,codedom,.net,Codedom,我需要这样做 public class MyClass{ private static IDictionary<String, Type> databaseAccessClasses = new Dictionary<String, Type>(); private static IDictionary<String, Type> DatabaseAccessClasses
public class MyClass{
private static IDictionary<String, Type> databaseAccessClasses
= new Dictionary<String, Type>();
private static IDictionary<String, Type> DatabaseAccessClasses
{
get { return DataAccessFactory.databaseAccessClasses; }
set { DataAccessFactory.databaseAccessClasses = value; }
}
}
公共类MyClass{
私有静态IDictionary数据库访问类
=新字典();
私有静态IDictionary数据库访问类
{
获取{return DataAccessFactory.databaseAccessClasses;}
设置{DataAccessFactory.databaseAccessClasses=value;}
}
}
使用以下代码:
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CodeCompileUnit compileUnit = new CodeCompileUnit();
CodeNamespace nameSpace = new CodeNamespace("xy");
compileUnit.Namespaces.Add(nameSpace);
CodeTypeDeclaration myClass = new CodeTypeDeclaration("MyClass");
nameSpace.Types.Add(myClass);
myClass.TypeAttributes = System.Reflection.TypeAttributes.Class | System.Reflection.TypeAttributes.Public;
CodeTypeReference dictionaryType = new CodeTypeReference("IDictionary", new CodeTypeReference(typeof(string)), new CodeTypeReference(typeof(Type)));
CodeMemberField myClass_databaseAccessClasses = new CodeMemberField(dictionaryType, "databaseAccessClasses");
myClass_databaseAccessClasses.Attributes = MemberAttributes.Static;
myClass.Members.Add(myClass_databaseAccessClasses);
CodeMemberProperty myClass_DatabaseAccessClasses = new CodeMemberProperty();
myClass_DatabaseAccessClasses.Name = "DatabaseAccessClasses";
myClass_DatabaseAccessClasses.Type = dictionaryType;
myClass_DatabaseAccessClasses.Attributes = MemberAttributes.Static;
myClass_DatabaseAccessClasses.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(new CodeTypeReference("DataAccessFactory")), "databaseAccessClasses")));
myClass_DatabaseAccessClasses.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(new CodeTypeReference("DataAccessFactory")), "databaseAccessClasses"), new CodeArgumentReferenceExpression("value")));
myClass.Members.Add(myClass_DatabaseAccessClasses);
StringWriter writer = new StringWriter();
codeProvider.GenerateCodeFromCompileUnit(compileUnit, writer, new System.CodeDom.Compiler.CodeGeneratorOptions());
// writer.ToString() contains the C# code
Rüdiger鲁迪格的答案很接近,但需要一些小的修改才能真正生成所需的代码:
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CodeCompileUnit compileUnit = new CodeCompileUnit();
CodeNamespace nameSpace = new CodeNamespace( "xy" );
compileUnit.Namespaces.Add( nameSpace );
CodeTypeDeclaration myClass = new CodeTypeDeclaration( "MyClass" );
nameSpace.Types.Add( myClass );
myClass.TypeAttributes = System.Reflection.TypeAttributes.Class | System.Reflection.TypeAttributes.Public;
CodeTypeReference dictionaryType = new CodeTypeReference( "IDictionary", new CodeTypeReference( typeof( string ) ), new CodeTypeReference( typeof( Type ) ) );
CodeMemberField myClass_databaseAccessClasses = new CodeMemberField( dictionaryType, "databaseAccessClasses" );
myClass_databaseAccessClasses.Attributes = MemberAttributes.Static | MemberAttributes.Private;
myClass_databaseAccessClasses.InitExpression = new CodeObjectCreateExpression(dictionaryType);
myClass.Members.Add( myClass_databaseAccessClasses );
CodeMemberProperty myClass_DatabaseAccessClasses = new CodeMemberProperty();
myClass_DatabaseAccessClasses.Name = "DatabaseAccessClasses";
myClass_DatabaseAccessClasses.Type = dictionaryType;
myClass_DatabaseAccessClasses.Attributes = MemberAttributes.Static | MemberAttributes.Private;
myClass_DatabaseAccessClasses.GetStatements.Add( new CodeMethodReturnStatement( new CodeFieldReferenceExpression( new CodeTypeReferenceExpression( new CodeTypeReference( "DataAccessFactory" ) ), "databaseAccessClasses" ) ) );
myClass_DatabaseAccessClasses.SetStatements.Add( new CodeAssignStatement( new CodeFieldReferenceExpression( new CodeTypeReferenceExpression( new CodeTypeReference( "DataAccessFactory" ) ), "databaseAccessClasses" ), new CodeArgumentReferenceExpression( "value" ) ) );
myClass.Members.Add( myClass_DatabaseAccessClasses );
StringWriter writer = new StringWriter();
codeProvider.GenerateCodeFromCompileUnit( compileUnit, writer, new System.CodeDom.Compiler.CodeGeneratorOptions() );
这不是缺少某种解释吗?事实上,这个答案对于将来有类似问题但源代码不完全相同的访问者来说并不是很有用。