国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

使用CodeDom開發基于B/S的.NET+MSSQL代碼生成器的隨感

2024-07-10 13:12:16
字體:
來源:轉載
供稿:網友


收集最實用的網頁特效代碼!

本人于2005.4月下旬開始編寫代碼生成器,到今天為止,已經差不多有一個半月左右,目前功能已基本實現,開發過程中,也遇到了很多的困難,在此感謝速馬大版主給我的無私幫助,如果這篇文章能夠對大家使用codedom開發有所幫助的話,我會感到很高興,關于codedom的介紹大家可以去msdn上看看,在此我就不多說了。
        眾所周知,.net是面向對象的語言,因此一段代碼里面就會有類、對象、接口、結構等與面向對象的思想密切相關的要素,而類中會有屬性、方法,委托、事件等等,再往下屬性又有私有變量或公有變量,這樣一層層就象一顆樹一樣,而這每一個要素都與codedom命名空間下的類有著一一對應的關系,當你想用codedom生成一個類時,必須先生成類中的要素,如屬性、方法,委托、事件等等,生成屬性時,也必須先生成屬性里的要素,這樣一來,每生成一個要素,只要找到codedom里對應的類就行了,呵,是不是有點糊涂了。
        不要緊,現在我給大家一個例子看看,可能就要明白些了。
   //保存源代碼的流。
   stream codestream = file.open("test.cs",filemode.create);
   streamwriter codewriter = new streamwriter(codestream);

   //創建一個代碼生成器實例
   csharpcodeprovider provider = new csharpcodeprovider();
   icodegenerator codegenerator = provider.creategenerator(codewriter);
   codegeneratoroptions codegeneratoroptions = new codegeneratoroptions();

   //添加命名空間
   codesnippetcompileunit literal = new codesnippetcompileunit
    ("using system;/nusing system.data;/nusing system.data.sqlclient;/n");
   codegenerator.generatecodefromcompileunit(literal,codewriter,codegeneratoroptions);

   //命名空間以及在此命名空間下面創建一個類
   codenamespace codenamespace = new codenamespace("codedom");
   codetypedeclaration codetypedeclaration = new codetypedeclaration();
   codetypedeclaration.name = "testclass";
   codetypedeclaration.isclass = true;
   codetypedeclaration.typeattributes = typeattributes.public;
   codenamespace.types.add(codetypedeclaration);

   //創建一個默認的構造函數
   codeconstructor codeconstructor = new codeconstructor();
   codeconstructor.attributes = memberattributes.public;
   codetypedeclaration.members.add(codeconstructor);

   //創建一個私有的字段
   codememberfield codemember = new codememberfield();
   codemember.name = "stest";
   codemember.attributes = memberattributes.private;
   codemember.type = new codetypereference(typeof(string));
   codetypedeclaration.members.add(codemember);

   //添加一個可以操作和讀取的屬性
   codememberproperty codememberproperty = new codememberproperty();
   codememberproperty.name = "test";
   codememberproperty.attributes = memberattributes.public;
   codememberproperty.type = new codetypereference(typeof(string));
   codememberproperty.getstatements.add
    (
    new codemethodreturnstatement
    (
    new codefieldreferenceexpression(new codethisreferenceexpression(),"stest")
    )
    );
   codememberproperty.setstatements.add
    (
    new codeassignstatement
    (
    new codefieldreferenceexpression(new codethisreferenceexpression(),"stest"),new codepropertysetvaluereferenceexpression()
    )
    );
   codetypedeclaration.members.add(codememberproperty);
   //生成代碼
   codegenerator.generatecodefromnamespace(codenamespace,codewriter,codegeneratoroptions);

   codewriter.close();
   codestream.close();
運行結果如下:
using system;
using system.data;
using system.data.sqlclient;

namespace codedom{
   
   
    public class testclass {
       
        private string stest;
       
        public testclass() {
        }
       
        public virtual string test {
            get {
                return this.stest;
            }
            set {
                this.stest = value;
            }
        }
    }
}
        以上的代碼理解起來并不難,只要大家看一看運行的結果就會明白了,里面具體所用到的類可以在msdn里查到,今天暫時就寫到這里吧,希望能給大家起一個拋磚引玉的作用,呵呵,如果想和我交流的朋友,可以發郵件到我的郵箱:[email protected],最后告訴大家:掌握codedom并不難。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 读书| 满洲里市| 青阳县| 静海县| 当阳市| 锡林郭勒盟| 股票| 辉县市| 广丰县| 炉霍县| 宝清县| 贞丰县| 邛崃市| 罗平县| 株洲市| 平原县| 黑龙江省| 敦煌市| 连州市| 阜阳市| 彰化市| 韶山市| 收藏| 孙吴县| 克东县| 邛崃市| 平安县| 奎屯市| 师宗县| 涟源市| 开平市| 天全县| 民权县| 始兴县| 多伦县| 沂南县| 清涧县| 宁海县| 洞口县| 双流县| 安丘市|