Пример #1
0
        public Oid()
        {
            _dna = new CsCompileUnit();
            CsNamespace ns = new CsNamespace(new CsIdentifier("System"));
            CsUsing     u1 = new CsUsing(ns);

            _dna.Usings.Usings.Add(u1);
            CsNamespace cn = new CsNamespace(new CsIdentifier(ECsNames.Namespace));

            _dna.UnitMembers.Members.Add(cn);
            CsClass cl = new CsClass();

            ((ICsModifiersProvider)cl).Modifiers = null;
            ((ICsClass)cl).ClassName             = new CsIdentifier("Program");
            cn.NamespaceMembers.Members.Add(cl);
            CsMethod m1 = new CsMethod(new CsIdentifier("Main"), null, null, null, null, null, null, null, null);

            ((ICsModifiersProvider)m1).Modifiers = new CsModifiers(ECsModifiers.Static);
            ((ICsMethod)m1).TypeResult           = new CsTypeReference(new CsVoid());
            cl.Body.Members.Add(m1);
            CsMethod            m2  = new CsMethod((new CsIdentifier("WriteLine")), null, null, null, null, null, null, null, null);
            CsExpressionCall    cm1 = new CsExpressionCall(new CsMethodReference(m2), null);
            CsExpressionLiteral l1  = new CsExpressionLiteral(new CsLiteralString("message"));
            CsArgument          a1  = new CsArgument(null, l1);

            ((ICsArgument)a1).ArgumentInitialisationType = ECsInitialisationType.Expression;
            cm1.Arguments.Arguments.Add(a1);
            CsExpressionName n1 = new CsExpressionName("Console");
            CsExpressionType t1 = new CsExpressionType(new CsTypeReference(typeof(System.Console), ECsReflectInfoStatus.ExternalDll), null);
            CsExpressionQualifiedExpression e1 = new CsExpressionQualifiedExpression(t1, cm1);

            ((ICsExpressionQualifiedExpression)e1).Access = ECsObjectAccess.Reference;
            CsStatementExpression s1 = new CsStatementExpression(e1);

            m1.Body.Statements.Statements.Add(s1);

            CsMethod         m3  = new CsMethod(new CsIdentifier("ReadLine"), null, null, null, null, null, null, null, null);
            CsExpressionCall cm2 = new CsExpressionCall(new CsMethodReference(m3), null);
            CsExpressionQualifiedExpression e2 = new CsExpressionQualifiedExpression(t1, cm2);

            ((ICsExpressionQualifiedExpression)e2).Access = ECsObjectAccess.Reference;
            CsStatementExpression s2 = new CsStatementExpression(e2);

            m1.Body.Statements.Statements.Add(s2);
        }
Пример #2
0
        public CsCompileUnit Make1()
        {
            var ccu = new CsCompileUnit();                                                   //  установить единицу компиляции
            var ns  = new CsNamespace(new CsIdentifier("System"));                           //  объявить пространство имен, которые будут включены в приложение
            var u1  = new CsUsing(ns);                                                       //  установить директиву использования пространства имен

            ccu.Usings.Usings.Add(u1);                                                       //  добавить его в модуль компиляции
            var cn = new CsNamespace(new CsIdentifier(ECsNames.Namespace));                  //  объявить главное пространство имен

            ccu.UnitMembers.Members.Add(cn);                                                 //  привязать пространство имен к единице компиляции
            var cl = new CsClass();                                                          //  оздать новый класс

            ((ICsClass)cl).ClassName = new CsIdentifier(nameof(Program));                    //  установить его имя как предопределенное для главного класса
                                                                                             //  it is in principle optional, see. System.CodeDom-entry point
            cn.NamespaceMembers.Members.Add(cl);                                             //  внедрить созданный класс в пространство имен программы
            var m1 = new CsMethod(new CsIdentifier(nameof(Program.Main)));                   //  создать основной метод - точку входа в основной класс программы

            (m1 as ICsModifiersProvider).Modifiers = new CsModifiers(ECsModifiers.Static);   //  указать, что он static
            ((ICsMethod)m1).TypeResult             = new CsTypeReference(new CsVoid());      //  задать возвращаемый тип
            cl.Body.Members.Add(m1);                                                         //  добавить метод в тело класса (1)
            var m2 = new CsMethod(new CsIdentifier("WriteLine"));                            //  добавить внешний метод (он указан по своему имени)
                                                                                             //  здесь предполагаем, что разбор внешних сборок выполнен
                                                                                             //  на которые указана ссылка в атрибутах компиляции
            var cm1 = new CsExpressionCall(new CsMethodReference(m2));                       //  декларация вызова метода
            var l1  = new CsExpressionLiteral(new CsLiteralString("message"));               //  декларация значения аргумента вызова
            var a1  = new CsArgument(null, l1);                                              //  расположение аргумента в списке аргументов

            ((ICsArgument)a1).ArgumentInitialisationType = ECsInitialisationType.Expression; //  указывают на то, что аргумент содержит простое выражение, и это его значение
            cm1.Arguments.Arguments.Add(a1);                                                 //  в коде вызова добавить этот аргумент
            var n1 = new CsExpressionName("Console");                                        //  указать имя вызываемого внешнего метода
            var e1 = new CsExpressionQualifiedExpression(n1, cm1);                           //  указание необходимости создать квалифицированное имя

            (e1 as ICsExpressionQualifiedExpression).Access = ECsObjectAccess.Reference;     //  фрагменты квалифицированного имени сочленяются через "."
            var s1 = new CsStatementExpression(e1);                                          //  создаем предложение кода

            m1.Body.Statements.Statements.Add(s1);                                           //  и помещаем его в тело метода


            return(ccu);
        }