日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解C#代碼文件生成擴(kuò)展代碼文件

看到這標(biāo)題的朋友可能搞不懂到底在搞什么,不過不要緊有興趣的朋友可以先了解一下IVsSingleFileGenerator到底是用來做什么用的《實(shí)現(xiàn)自定義的VsSingleFileGenerator 》;在vs.net里提供一個(gè)IVsSingleFileGenerator接口可以方便地為項(xiàng)目文件生成附屬文件,如剛才那文章提到的根據(jù)XML文件自動(dòng)生成一個(gè)附屬的C#代碼文件;當(dāng)然這個(gè)IVsSingleFileGenerator并不只是針對XML文件,可以是隨便為任何項(xiàng)目文件生成附屬文件你只要在文件屬性中設(shè)置相關(guān)Custom Tools就可以了.

創(chuàng)新互聯(lián)是專業(yè)的潘集網(wǎng)站建設(shè)公司,潘集接單;提供成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行潘集網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

為什么在這里我提出在代碼文件的基礎(chǔ)上再生相關(guān)的代碼附屬文件呢,為什么不直接在原代碼文件寫完整就可以了;原因很簡單因?yàn)槭謱懘a是沒有電腦來得快,最主要一個(gè)原因是基于XML的IVsSingleFileGenerator在某方面不好所以才采用基于代碼文件的方式作為代碼描述模板.用XML描述在現(xiàn)情況碰到的問題,在我的數(shù)據(jù)持久層里是采用XML結(jié)合IVsSingleFileGenerator來生成相關(guān)實(shí)體類的.

內(nèi)容大概如下:

















VsSingleFileGenerator會(huì)根據(jù)XML生成以下相關(guān)實(shí)體:
///
/// 用戶名
///

public virtual string UserName {
get {
return this.mUserName;
}
set {
this.mUserName = value;
this.EntityState.FieldChange("UserName");
}
}
///
/// 用戶密碼
///

public virtual string UserPWD {
get {
return this.mUserPWD;
}
set {
this.mUserPWD = value;
this.EntityState.FieldChange("UserPWD");
}
}
///
/// 客戶類型
///

public virtual int CustomerType {
get {
return this.mCustomerType;
}
set {
this.mCustomerType = value;
this.EntityState.FieldChange("CustomerType");
}
}

VsSingleFileGenerator有個(gè)不好的地方就是當(dāng)主文件修改后會(huì)重新生成附屬文件,這樣就導(dǎo)致你無法修改代碼文件.如果想為某些屬性成員添加Attribute來處理一些功能基本是沒辦法的.

如添加成員數(shù)據(jù)驗(yàn)證:

[NotNull]
[Length("5","16","用戶名長度必須在5-16個(gè)字符內(nèi)!")]
public string UserName
{
get;
set;
}

即使能解決VsSingleFileGenerator生成附屬文件沖突問題;但也要面對另一個(gè)問題,就如何擴(kuò)展XML來處理這些擴(kuò)展呢,添加XMLSchema擴(kuò)展描述規(guī)則,重寫VsSingleFileGenerator代碼生成部份;這樣下來沒多久我估計(jì)自己會(huì)瘋了....

實(shí)際情況添加不同Attribute來擴(kuò)展輔助功能是很常見的事情,就一個(gè)驗(yàn)證來說根據(jù)實(shí)際情況就有很多情況,類構(gòu)造方式也不一樣.就針對這些情況來擴(kuò)展XMLSchema和重寫VsSingleFileGenerator帶來的工作量就不用說了,還有一個(gè)問題就是XML并不能提供類型編譯的保證這樣對XML的質(zhì)量是很難保證.

經(jīng)過了一段時(shí)間的思考發(fā)現(xiàn)為什么不直接用代碼作為原模板呢,這樣就能得到IDE的支持,強(qiáng)在編譯器的支持下保證類型輸入規(guī)則的有效性.以下是本人實(shí)現(xiàn)的簡單生成模型:

[Table]
interface IUser
{
[ID]
string UserName { get; set; }
string BirthDate { get; set; }
string Region { get; set; }
string Remark { get; set; }
}

生成的相關(guān)代碼

[Table]
[Serializable]
public class User:Smark.Data.Mappings.DataObject
{
[ID]
public string UserName { get{ return mUserName;}
set{mUserName=value;EntityState.FieldChange("UserName");} }
private string mUserName;
public static Smark.Data.FieldInfo userName = new Smark.Data.FieldInfo("User","UserName");
public string BirthDate { get{ return mBirthDate;}
set{mBirthDate=value;EntityState.FieldChange("BirthDate");} } 
private string mBirthDate;
public string Region { get{ return mRegion;}
set{mRegion=value;EntityState.FieldChange("Region");} }
private string mRegion;
public string Remark { get{ return mRemark;}
set{mRemark=value;EntityState.FieldChange("Remark");} }
private string mRemark;
}
}

這樣的話即使我們?nèi)绾谓o屬性添加Attribute都不會(huì)帶來代碼上的修改,VsSingleFileGenerator只對屬性作一個(gè)模板生成其他內(nèi)容搬過來就可以了:)

WPS的排版真是沒有WORD的好...估計(jì)我不會(huì)用.


分享文章:詳解C#代碼文件生成擴(kuò)展代碼文件
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/djsdhsp.html