国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      軟件的程序代碼的生成方法及裝置制造方法

      文檔序號:6630284閱讀:1633來源:國知局
      軟件的程序代碼的生成方法及裝置制造方法
      【專利摘要】本發(fā)明公開了一種軟件的程序代碼的生成方法及裝置。其中,該方法包括:添加XML文件,其中,XML文件用于標記目標類的屬性特征,目標類為實現(xiàn)目標功能的程序代碼;獲取XML文件中至少一個對象的屬性值并通過XML文件中至少一個對象的屬性值生成目標代碼;將目標代碼輸出到XML文件中標記的目標類中,本發(fā)明解決了現(xiàn)有技術(shù)在生成具有重復部分的代碼時,需要要針對重復的部分手動依次輸入,導致生成代碼效率低的問題。
      【專利說明】軟件的程序代碼的生成方法及裝置

      【技術(shù)領(lǐng)域】
      [0001] 本發(fā)明涉及計算機領(lǐng)域,具體而言,涉及一種軟件的程序代碼的生成方法及裝置。

      【背景技術(shù)】
      [0002] 依賴屬性是軟件開發(fā)中應用的重要手段之一,設(shè)計依賴屬性的目的就是根據(jù)多個 不同的輸入動態(tài)計算出屬性值,這些不同的輸入包括:資源文件、綁定、動畫、屬性繼承等, 現(xiàn)有技術(shù)對于依賴屬性的定義通常采取如下部分代碼:
      [0003] ^public static readonly DependencyProperty JsSpinnm^roperty = DepenctencyProper1y.Register( "IsSpinning", typeof(bool), typeof(ExampJeCIass), new ProperlyMetadala(irw4 /s^//i/w>j^ProperlyChangeCailback)"
      [0004] 從上述代碼可知,定義依賴屬性非常較為繁瑣,每次定義都要手動輸入大量內(nèi)容, 但是從中可以發(fā)現(xiàn)規(guī)律,即除了上述斜體字,其他的字符都是固定不變的,現(xiàn)有技術(shù)中解決 的方案比如visual studio或Resharper等工具都可以在界面上自動生成上述固定不變的 字符串,即在IsSpinning或bool等依賴屬性的屬性值上采用斜體等特殊方式標識。用戶 只需針對有標識的屬性特征值進行輸入,以解決上述輸入繁瑣的問題。
      [0005] 這里需要說明的是,上述代碼中多次重復出現(xiàn)依賴屬性名稱,例如,IsSpinning, 用戶每次修改依賴屬性的時候都要多次進行重復的輸入,最后生成依賴屬性的代碼,代碼 生成效率較低。
      [0006] 針對現(xiàn)有技術(shù)在生成具有重復部分的代碼時,要針對重復的部分手動依次輸入, 導致生成代碼效率低的問題,目前尚未提出有效的解決方案。


      【發(fā)明內(nèi)容】

      [0007] 本發(fā)明的主要目的在于提供一種軟件的程序代碼的生成方法及裝置,以解決現(xiàn)有 技術(shù)在生成具有重復部分的代碼時,需要針對重復的部分手動依次輸入,導致生成代碼效 率低的問題。
      [0008] 為了實現(xiàn)上述目的,根據(jù)本發(fā)明實施例的一個方面,提供了一種軟件的程序代碼 的生成方法。該方法包括:添加 XML文件,其中,XML文件用于標記目標類的屬性特征,目標 類為實現(xiàn)目標功能的程序代碼;獲取XML文件中至少一個對象的屬性值并通過XML文件中 至少一個對象的屬性值生成目標代碼;將目標代碼輸出到XML文件中標記的目標類中。
      [0009] 為了實現(xiàn)上述目的,根據(jù)本發(fā)明實施例的另一方面,提供了一種軟件的程序代碼 的生成裝置。該裝置包括:添加單元,用于添加 XML文件,其中,XML文件用于標記目標類的 屬性特征,目標類為實現(xiàn)目標功能的程序代碼;獲取單元,用于獲取XML文件中至少一個對 象的屬性值并通過XML文件中至少一個對象的屬性值生成目標代碼;輸出單元,用于將目 標代碼輸出到XML文件中標記的目標類中。
      [0010] 根據(jù)發(fā)明實施例,通過添加 XML文件,其中,XML文件用于標記目標類的屬性特征, 目標類為實現(xiàn)目標功能的程序代碼;獲取XML文件中至少一個對象的屬性值并通過XML文 件中至少一個對象的屬性值生成目標代碼;將目標代碼輸出到XML文件中標記的目標類 中,本發(fā)明解決了現(xiàn)有技術(shù)在生成具有重復部分的代碼時,需要要針對重復的部分手動依 次輸入,導致生成代碼效率低的問題。

      【專利附圖】

      【附圖說明】
      [0011] 構(gòu)成本申請的一部分的附圖用來提供對本發(fā)明的進一步理解,本發(fā)明的示意性實 施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當限定。在附圖中:
      [0012] 圖1是根據(jù)本發(fā)明實施例的一的軟件的程序代碼的生成方法流程圖;
      [0013] 圖2是根據(jù)本發(fā)明實施例二的軟件的程序代碼的生成裝置的結(jié)構(gòu)示意圖;
      [0014] 圖3是根據(jù)本發(fā)明實施例二的優(yōu)選的軟件的程序代碼的生成裝置的結(jié)構(gòu)示意圖; 以及
      [0015] 圖4是根據(jù)本發(fā)明實施例二的優(yōu)選的軟件的程序代碼的生成裝置的結(jié)構(gòu)示意圖。

      【具體實施方式】
      [0016] 需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相 互組合。下面將參考附圖并結(jié)合實施例來詳細說明本發(fā)明。
      [0017] 為了使本【技術(shù)領(lǐng)域】的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的 附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是 本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù) 人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范 圍。
      [0018] 需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語"第一"、"第 二"等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使 用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的本發(fā)明的實施例。此外,術(shù)語"包括"和 "具有"以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元 的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有 清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
      [0019] 本申請應用術(shù)語解釋如下:
      [0020] 1. Visual Studio :是微軟為開發(fā)人員提供的開發(fā)工具。
      [0021] 2. Resharper :是Visual Studio的一個插件,主要是提供很多便利的功能,提高 開發(fā)效率。
      [0022] 3. T4模板:集成在Visual Studio中代碼生成工具,主要用于自動生成代碼。
      [0023] 4.分部類:就是將類拆分到多個文件中,每個文件是類的一部分,編譯時將所有 部分組合起來。
      [0024] 5.分部方法:類似于分部類,就是將方法拆分到多個文件中,一個文件中給出方 法定義,一個文件中給出方法實現(xiàn)。
      [0025] Customer.es 文件: public partial class Customer { public string Customerld {get; set;} partial void Buy(); } Customer___action.cs 4;fl: public partial class Customer {
      [0026] partial void Buy〇 { }
      [0027] 6. Attribute (特性):在.NET中定義的類、方法都是有元數(shù)據(jù)的,以類為例,類的 名稱、類型、命名空間,訪問修飾符(public、private)這些都相當于元數(shù)據(jù)信息,編譯好的 程序集包含這些元數(shù)據(jù)信息。特性也是一種元數(shù)據(jù)信息,編譯后程序集中保存了每個類應 用的特性。
      [0028] 7.反射:就是讀取程序集的元數(shù)據(jù),運行時創(chuàng)建類的實例,或從現(xiàn)有對象獲取類 型并調(diào)用其方法或訪問其字段和屬性。如果代碼中使用了特性,可以利用反射來訪問它們。
      [0029] 8.工程:代碼組織方式,可以理解為存放代碼容器,可以包含文件夾、代碼文件、 XML文件、文本文件等。
      [0030] 9.解決方案:同樣是一種代碼組織方式,比工程范圍更廣,一個解決方案包含多 個工程,還可以包含虛擬文件夾(因為解決方案中的文件夾不是真實存在的,不對應具體 真實文件路徑,工程中的文件夾是對應真實的文件路徑的)。
      [0031] 10. DTE,開發(fā)環(huán)境,其實就是Visual Studio提供的編程接口,使用這些接口可以 針對Visual Studio進行編程,擴展Visual Studio的功能。
      [0032] 實施例1
      [0033] 本發(fā)明實施例提供了一種軟件的程序代碼的生成方法,如圖1所示,該方法可以 包括:
      [0034] 步驟S101,添加 XML文件,其中,XML文件用于標記目標類的屬性特征,目標類為實 現(xiàn)目標功能的程序代碼。
      [0035] 具體的,本實施例可以以生成依賴屬性的模板的代碼為例進行描述,本實施例提 供方法首先添加 XML文件,上述XML文件可以包含多個控件定義的依賴屬性,上述目標類可 以是需要生成依賴屬性的類。
      [0036] 步驟S103,獲取XML文件中至少一個對象的屬性值并通過XML文件中至少一個對 象的屬性值生成目標代碼。
      [0037] 具體的,本實施例提供的方法可以獲取上述XML文件中的多個屬性值并根據(jù)上述 多個屬性值生成目標代碼,上述多個屬性值可以是生成依賴屬性所需要的 :RangeC〇ntr〇l、 Maximum、Minimum、double等??蛇x的,上述目標代碼可以是依賴屬性模板的代碼。
      [0038] 步驟S105,將目標代碼輸出到XML文件中標記的目標類中。
      [0039] 具體的,可選的,在新的程序集中生成依賴屬性代碼之后,如果要修改依賴屬性的 話,只需要修改XML中的多個屬性值即可,不需要多處修改。
      [0040] 本實施例通過添加 XML文件,并獲取上述XML文件中的多個屬性值,生成目標代 碼,上述目標代碼中包含重復的部分。本實施例解決了現(xiàn)有技術(shù)在生成具有重復部分的代 碼時,需要要針對重復的部分手動依次輸入,導致生成代碼效率低的問題。
      [0041] 可選的,步驟S101中添加 XML文件的步驟可以包括:
      [0042] 步驟S1011,定義XML文件的對象,其中,XML文件包括以下至少一個對象:目標類 名稱、目標類屬性。
      [0043] 具體的,上述XML文件如下面的代碼所示:
      [0044] 〈? xml version = 〃1. 0"encoding = 〃utf_8" ? >
      [0045] 〈dependencyObjects
      [0046] xmlns = "http://www. scottlogic. co. uk/DependencyObject"
      [0047] xmlns:xsi = "http://www. w3. org/2001/XMLSchema_instance">
      [0048] 〈dependencyOb ject name = " RangeControl,'>
      [0049] <dependencyPropertyname = 〃Maximum〃type = 〃double〃defaultValue = "0·0"/>
      [0050] <dependencyPropertyname = 〃Minimum〃type = 〃double〃defaultValue = "0·0"/>
      [0051] </dependencyObject>
      [0052] 〈/dependencyObjects〉
      [0053] 在上述代碼中,dependencyObjects為上述XML的文件根節(jié)點, dependencyOb ject是定義依賴屬性的控件,RangeControl是控件名稱即上述目標類名稱, dependencyProperty是控件定義的依賴屬性,Maximum為依賴屬性的名稱即上述目標類屬 性,type指定依賴屬性的類型,defaultValue為依賴屬性的默認值,上述屬性分別對應目 標類中的各個屬性。
      [0054] 可選的,步驟S103中獲取XML文件中至少一個對象的屬性值并通過XML文件中至 少一個對象的屬性值生成目標代碼的步驟還可以包括:
      [0055] 步驟S1031,使用T4模板分別讀取目標類名稱和目標類屬性,獲取XML文件中的至 少一個對象的屬性值。
      [0056] 具體的,本發(fā)明實施例可以使用T4模板來將上述XML文件轉(zhuǎn)換成依賴屬性的代碼 文件,可以首先使用T4模板讀取上述XML文件中的目標類名稱,結(jié)合上述XML代碼,上述 目標類名稱可以是cbpendencyObject,然后讀取目標類屬性,結(jié)合上述XML代碼,上述目標 類名稱可以是 dependencyProperty,上述 XML 文件中的 RangeControl、Maximum、Minimum、 double 等為 dependencyProperty 的不同屬性值。
      [0057] 步驟S1032,將XML文件中的屬性值替換目標代碼模板中的占位符,生成目標代 碼,其中,目標代碼模板為預先定義的模板。
      [0058] 具體的,上述目標代碼模板可以為生成依賴屬性的模板,例如下面的代碼:
      [0059] public partial class {2} public static readonly DcpcndcncyPropcrty {0}Propcrly = Dcpcndc ncy Property. RegistcrC" {0}", typcof({ 1}), typcof^{2}), new ProperlyMetadata( {3}?{0} PropertyChangeCallback)); public {1} {0} { get { return ({1 })GetVaiue({0}Property); } set { SctVaIuc({0}Propcrty5 value): } } partial static void {0 \ PropertyChangeCallback (Dependency Object obj, DependencyPropertyChangedEventArgs args); }
      [0060] 在上述代碼中,占位符0、1、2、3可以對應上述XML文件中的多個屬性。從上述模 板中可以看到第零個占位符為依賴屬性的名稱,第一個占位符為依賴屬性的類型,第二個 占位符為依賴屬性的擁有者,第三個占位符為依賴屬性的默認值。讀取到上述XML中多個 屬性值后,直接將上述四個占位符中替換即可。
      [0061] 可選的,步驟S103中獲取XML文件中至少一個對象的屬性值并通過XML文件中至 少一個對象的屬性值生成目標代碼的步驟還可以包括:
      [0062] 步驟S1033,使用XSLT來定義匹配模板,上述匹配模板用于匹配XML文件。
      [0063] 具體的,本發(fā)明實施例可以使用述XSLT匹配上述XML文件的模板Template,這里 需要說明的是,在XSLT中Template,就是模板的意思,主要包含如下兩部分的定義:
      [0064] 1. match屬性:定義匹配的路徑,如果匹配到指定的路徑的話,就為這個路徑下的 內(nèi)容應用模板
      [0065] 2.輸出內(nèi)容:輸出內(nèi)容中可以引用配置到路徑中的XML元素及其屬性,還可以為 這個路徑下的元素繼續(xù)應用其他模板。
      [0066] 步驟S1034,使用XSLT獲取XML文個屬性值,并應用到匹配XML文件的模板中,生 成目標代碼。
      [0067] 具體的,首先,在定義匹配XML根元素的Template之后,可以在上述Template中 輸出命名空間定義。
      [0068] 然后,定義匹配dependencyObject的Template,在該Template中輸出類定義。
      [0069] 最后,定義匹配 DependencyProperty 的 Template,在該 Template 中訪問 dependencyProperty元素的各個屬性,填充到上述模板即匹配XML文件的模板中,從而輸 出每個依賴屬性的定義。
      [0070] 上述步驟S1033至步驟S1034具體如下:
      [0071] <!一所|jj XML通Ifj的,戎明XML版本以及使.Hj_卞符編W--> <?xml versionH cncoding="utf-『?> <!-XSLT 極元素--> <xsl:stylcshcct vcrsion=,* 1,0" xmlns:xsl="http://m\ ,w.w3.org/,1999/XSL/Transform" xmlns:msxsl=',urn:schemas-microsoft-com:xslt,' excludorcsult-prd1xes="msxsr xrrdns: d=" hup ://w w w. scotl I ogi c. co. uk/DependencyObj ecl_'> <!-輸出文的格式,〖ext表小輸H丨為純文木--> <xsl:output method="text"/> <!-4dW兒索的Template, /表小IK配報兒索,這個Template之后的操作都足 計對根凡素的,+作找兒索Ik Μ相對ΓΛΟ?素的-> <!--注總根兒尜整個XML義才1, dcpendencyObjects元素,在XML中
      [0072] 足不討見的--> <xsl:tcmplatc match="/"> <!-接卜'來足輸出,就足簡中.的純文木,這,純義本將農(nóng)ι?.接輸 出到111?、·義'件屮,ut:不+id使丨丨1<>如_勺都記純文木,μ接輸出到丨⑷義件,卜'Μ namespace DcpcndencyPropcrly { <!--這11丨.如』響川校板,Κ、/:⑴校板分如叫少,祕+找到指記;c+教,即select Μ件11 Oii義的內(nèi)容,U體到這中.,就Μ光找到dependency Objects κ ++素 ,+t 4找到 dependencyObjcct 元桌,第.:步為好個 dcpcndencyObject 幾素 il狀)li擬 很據(jù)稅板內(nèi)W繼續(xù)1·:成義本,Η體到這Μ使丨1丨_校皎就M <xs丨:lemplate niatcj1="ci:dcpcndcncyOhjcct">14'1+、_;i:+|^ii5C_| :^fii--> <!--丨+]:m dcpcndcncyObjecls 兒索卜'包穴名個 dcpcndencyObjcct 元盔,所以M名次 應|丨|,好個dcpmdcncyObjcct網(wǎng)窗出到這1R,也就1?·將松板內(nèi)W輸出到這Ψ:--> <xsl:apply-lcmplatcs selccl="/d:dcpcndcncyObjccis/d:cicpcndcncy〇bjcci"/> } </xsl:tcmplatc> <!--間Λ!dcpendcncyObjecl 的 Template,這個校板都足計對ciependcncyObjccUi:^ 的,卜_的<.xs丨:va丨uc-oΓsclccl="@namc"/>代表選抒nameW性,W為這個梭板足針對 dcpcndcncyObjcct 元索,所以就'ii選# dependcricyObject _ name Μ性,針對我們的例 J'.,敗今 dcpendencyObjcct 兒索 name .Wfk為 RangcCo_*ol ,所以對 Γ 卜第 + 的代W,那么第…個 dcpendencyObjeciji;素輸出.public partial class RangcControl 一 > <!-sdcci中的(g代表屬性選抒,@--·文本為Λ體選抒的屬性名稱--> <xsl:icmplatc malch:=nd:dcpcndcncyObjccin> public partial class <xsi:va!uc-of sclcct=::tt(?;:namet, /> { <!一首先找到dependencyObject的所冇dependencyProperty元素 s然后為_個元 素應:用<xsl:tcmplate niatch="d:dqperKkncyPropcrty">||!飯一> <xsl;apply-tcmplatcs sdcct::=ffd:dcpcndcncyPropcrtyM/>
      [0073] </xsI:lcmplalc> <!-Ill'll! dependency Property 1? Template ^ 這個 針對 dependency Property iii 索_,h iillf^KxHhvalue-orsclccl^Xi/jnamc'*/>&?^ dcpcndcncyObjccl fill name Mf-lif 這 -綴兒索,_ dependencyProperty 兒索 1? I:.緩元索,Ik就M dependencyObjeel 元索 <xsl template match^'drdcpcndcncyProperly,f> public sialic readonly DcpcndcncyPropcrty <x^]:valuc-〇r select- />Property = DcpcndcncyPropcrty,Rcgistcr(f'<xsl:valuc~〇r sclccl-^famamc" />", lypcof(<xsI:valuC"〇f sclccl^'^lHypc'' />), lypcolX<xsl:ydnc~o( sclcci-\J(mmmcn />), new PropcrtylVlcladata(<xsl;valuc~of select^'XgklcfaultValue1' />,<xsl;vaIuc-of select-/>PropcrtyChangcCalIback)); public <xsl:vaIuc?〇rsclccl-'(ciilypcf' /> <xsl:valuc*ofsclecl::::::f'@namcls /> { gel { rolurn (<xsl:valuc?of sclcct=n(gllypcf' />)OclVaIuc(<xsl:vaIiic-of sdwt="@rmnie_' />Propaty); } scl { SclValuc(<xsl:valuc?〇rsclcct^fi(cimamcf,/>Propcrty, value); } ) partial static void <xsI:vahic-〇r scloct='i@namcf, />PropcrtyChangcCalIback (DcpcndcncyObjccl obj, DcpcndcncyPropcriyChangcdEvcntArgs args); </xsI:lcmplaic> </xsl;stylcshcct>
      [0074] 可選的,步驟S101中添加 XML文件之前,本發(fā)明實施例提供的方法還可以包括:
      [0075] 步驟S100,定義目標代碼模板,其中,目標代碼模板中包含至少一個屬性:其中, 至少一個屬性在目標代碼模板中使用不同的占位符替換。
      [0076] 可選的,本實施例相對于舊的技術(shù)方案,為修改依賴屬性提供了便利,說明了如何 簡化依賴屬性的生成和修改,但是該解決方案并不局限于依賴屬性,比如下面的例子也可 以使用該解決方案解決:
      [0077] public class Customer; INolifyProper%rChtnged i private int ^customarldj public int Custonierld { get { return ^customerld;} set c __custooier Id = value; OnPropertyChangedCXustomerld"); } } public event PropertyChangeclEventHandfer ProperlyChanged; protected virtual void OnProperlyClianged(string propertyName) c PropertyChangedEventHandler handler = PropertyChanged; if (handler 1= null) handler(this, new PropertyChangedEventArgs(propertyName)); } }
      [0078] 這個例子中Customerld屬性的生成,和依賴屬性的生成同屬一類問題,即需要輸 入許多內(nèi)容,但是這些內(nèi)容大部分都是重復的,只有一小部分內(nèi)容是不一樣的。這個屬性的 生成也可以通過Visual Studio和Resharper提供的功能實現(xiàn),但是問題和依賴屬性的問 題是一樣的,即不支持修改。使用該解決方案,也可以解決類似于這樣的屬性的生成。
      [0079] 下面本申請結(jié)合具體場景進行描述:
      [0080] 1.添加 XML文件,該文件描述所有控件定義的依賴屬性,如下所示的實例:
      [0081] 〈? xml version = 〃1· 0"encoding = "uff_8〃 ? >
      [0082] 〈dependencyOb jects
      [0083] xmlns = "http://www. scottlogic. co. uk/DependencyObject"
      [0084] xmlns:xsi = 〃http://www. w3. org/2001/XMLSchema_instance">
      [0085] 〈dependencyObject name = 〃RangeControl〃>
      [0086] <dependencyProperty name = 〃Maximum〃type = 〃double〃defaultValue = "0·0"/>
      [0087] <dependencyProperty name = 〃Minimum〃type = 〃double〃defaultValue = "0·0"/>
      [0088] </dependencyObject>
      [0089] </dependencyObjects>
      [0090] 1) dependencyOb jects 是文件根節(jié)點。
      [0091] 2) dependencyObject是定義依賴屬性的控件,name是控件名稱。
      [0092] 3) dependencyProperty是控件定義的依賴屬性,name為依賴屬性的名稱,Wpe指 定依賴屬性的類型,defaultValue為依賴屬性的默認值。
      [0093] 2.將XML轉(zhuǎn)化為代碼文件,有兩種方式:T4模板和XSLT。
      [0094] 1)Τ4 模板
      [0095] i.讀取dependencyObject,下面模板中第2個占位符為其name屬性值。
      [0096] ii.讀取dependencyProperty,第0個占位符為其name屬性值,第1個占位符為 其type屬性值,第3個占位符為其defaultValue屬性值。
      [0097] Iii.使用上面解析的內(nèi)容填充下面的依賴屬性模板,上述依賴屬性的模板如下:
      [0098] public partial class {2} { public static readonly DependencyProperty {0}Properly = D e p en dency Prop e r ty. Register (" {0 }", typeof({l}), typeof({2}), new PropertyMetadata({3},{0}PropertyChangeCallback)); public {1} {0} i get { return ({l})GetVaIue({0}Property); } set{ SetValueCfOlProperty, value);} } partial static void {0}ProperlyChangeCallback (DependencyObject obj, DependencyPropertyChangedEventArgsargs); }
      [0099]
      [0100] 2)使用 XSLT
      [0101] i.定義匹配根元素的Template,在該Template中輸出命名空間定義,并為根元素 下 dependencyObjects 節(jié)下 dependencyObject 節(jié)應用第二步定義的 Template
      [0102] ii.定義匹配dependencyObject的Template,在該Template中輸出類定義,并為 dependencyProperty 節(jié)應用第三步定義 Template
      [0103] iii.定義匹配 DependencyProperty 的 Template,在該 Template 中訪問 dependencyProperty元素的各個屬性,填充到模板中,從而輸出每個依賴屬性的定義
      [0104] 這里需要說明的是,在XSLT中Template,就是模板的意思,主要包含兩部分的定 義。
      [0105] 第一,match屬性:定義匹配的路徑,如果匹配到指定的路徑的話,就為這個路徑 下的內(nèi)容應用模板
      [0106] 第二,輸出內(nèi)容:輸出內(nèi)容中可以引用配置到路徑中的XML元素及其屬性,還可以 為這個路徑下的元素繼續(xù)應用其他模板
      [0107] 下面是使用上述XSLT將上述XML文件轉(zhuǎn)化成代碼的完整過程:
      [0108] <!一所州XML通)1|的,衣明XML版木以及使川的7·符編?ι?|--> <?xml version="l,0" encoding="utf-8,,?> <!-XSLT 根兀索--> <xsl:sty]esheet version = "l .0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform H xmlns:msxsl="urn:schemas-microsoft-com:xsir exclu de - resu It- prefixes=" msxsl" xmlns:d="http;//www.scottfagic.co,uk/DependencyObject"> <!-輸出文料的fe?式,text.表不輸出為純_5C本
      [0109] <xsl:output niethod="text'7> 根兒索的Template, / -及'阼fl!根兒索,這個Template之Ι+Γ?的操彳1:擁 Mf 丨'對HOc尜的,彳\找/?+素 ?·Λ?ι:尜的--> <!--Π;?W 圯+'教牯個 X謝」iM.1,dependencyObjees 元+索,XML ΦΜ 不可見的> <xsl: template match="/"> <!一接卜'來;剛廠處輸出,以P:(解為就站的純文木,這'屯 lh到丨1_+打t'.屮,.U要撲)以"丨<>包_%都)接以木,.《接輸出到丨丨^^^^ namespace DependencyProperty { <!-這丨ii灰小陽關(guān)m·)賴液板分為l·⑷ W件中定義的內(nèi)養(yǎng),U體到這lIU就〗』找到ctependencyObjects it:索,:f^找到 depenctencyObject ;l索,第 ctepen^ncyObject [桌Λ說:州模板^ 根鋸模飯內(nèi)棄繼續(xù)卞成文本,丨到這1ΓΗ--Ι%俊K就處<xsl:templat e malch="d:ctependencyObjecr>這個元素疋義 --? 模飯-> 〈卜-注總^pendeneyObjeets /口5下包含多個ctependencyOb丨ect元泰,所以足多次 應丨?,?皆1、ctependencyObject都輸出到這,岜就Μ將模扳內(nèi)韓輸出到這串_--> <xsl:apply-templates setect=!,/d:dependency0bjects/d:cfepencfeiicy0bjectl7> } </KSl:tamphte> <!--EK ctepen&ncyObject 的 Template,這個模飯都足針對 depenctencyObject 7t 素的,F(xiàn)__<?1:value-ofsefcct=fi@nameK />代礙選擇 name Wrt,因為這個模t 針對depenctencyObject元素,所以就足選擇dependencyObject的name屬性,針對我 們_例/▼,第-個cfepenctencyObject元素 name屬性為RangeControl,所以對T下面 第二行的代碼,SP么笫一個cfepenctencyObject元素輸出為:public partial class RangeControl --> <!-setert中的@代農(nóng)選擇,文本為H沐選擇的W性名稱-> <xsl:template match="d:ctepemfencyObjecr> public partial chss <xsl;value?of sefect="@name" /> i
      [0110] <!-Tf 先找到 ctepenifcncyObject 的所 ctepenctencryProperty 兒索,然丨Π 為 g個 iC#I^IIj<xsl:tempbte match-"dctepenifcncyProperty'^l^lfi-^ <xsl:apply-templates sefect=,,d:cfependBncyProper^l7> } </xsl:template> <!--l凡:W ctepencfencyProperly 1? Iternplate,這個模板針對 ctepencfencyProperty 兒素的,卜 _Wj<xs〗:va〗ue-of sefcct=M@name" />選抒.cfepen^ncyOb丨ect ?Κ( name W性, 這1 H特別丨 Κ ? 的是<xsl:value-of setect=",./@name" />? 這!丨l _ 雙點 U.代.於 !'/ IW cfepenctencyProperty Iv lli就處 cfependencyObject 元 索--> <xsl:tempbte match=Hd:ctependencyFropertyH> public static re a (ton ly Depencfency Properly <xs];value-of select=lt@nametf />Property = DeperutencyProperty.RegisterC^xskvalue-of sefect=l,@namen />' typeof(<xsl:value-of setect=f,@type" />), typeof(<xsl;value-of setect=r,/@nameM />), new PropertyMetadata(<xsl:vaIue-of setect=H@ctefaultValue!i />,<xsl:value-of setect=i,@namei, />PropertyChangeCallback)); public <xsl:value-of setect=n@typer, /> <xsl;value-of setect=H@name" /> { get { return (<xsl:value-of setect="@type" />)GetValue(<xsl:value-of setect="@nameM />Property);} set { Set¥alue(<isl;value-of setect="@nanie" />Property, value);} } partial static void <xsl:value-of select="@name" />PropertyChangeCallback (DependencyObject obj, DependencyPropertyChangedEventArgs args); </xsl: template〉 </xsl:sty!esheet>
      [0111] 實施例2
      [0112] 本發(fā)明實施例還提供了一種軟件的程序代碼的生成裝置。如圖2所示,該裝置可 以包括:
      [0113] 添加單元200,用于添加 XML文件,其中,XML文件用于標記目標類的屬性特征,目 標類為實現(xiàn)目標功能的程序代碼。
      [0114] 具體的,本實施例可以以生成依賴屬性的模板的代碼為例進行描述,本實施例提 供方法可以首先添加 XML文件,上述XML文件可以包含多個控件定義的依賴屬性,上述目標 類可以是需要生成依賴屬性的類。
      [0115] 獲取單元202,用于獲取XML文件中至少一個對象的屬性值并通過XML文件中至少 一個對象的屬性值生成目標代碼。
      [0116] 具體的,本實施例提供的方法可以獲取上述XML文件中的多個屬性值并根據(jù)上述 多個屬性值生成目標代碼,上述多個屬性值可以是生成依賴屬性所需要的 :RangeC〇ntr〇l、 Maximum、Minimum、double等??蛇x的,上述目標代碼可以是依賴屬性模板的代碼。
      [0117] 輸出單元204,用于將目標代碼輸出到XML文件中標記的目標類中。
      [0118] 具體的,可選的,在新的程序集中生成依賴屬性代碼之后,如果要修改依賴屬性的 話,只需要修改XML中的的多個屬性值即可,不需要多處修改。
      [0119] 本實施例通過添加 XML文件,并獲取上述XML文件中的多個屬性值,生成目標代 碼,上述目標代碼中包含重復的部分。本實施例解決了現(xiàn)有技術(shù)要生成具有重復部分的代 碼要針對重復的部分手動依次輸入,生成代碼效率低的問題。
      [0120] 可選的,如圖3所示,上述添加單元200可以包括:
      [0121] 第一定義模塊2002,用于定義XML文件的對象,其中,XML文件包括以下至少一個 對象:目標類名稱、目標類屬性。
      [0122] 具體的,上述XML文件如下面的代碼所示:
      [0123] 〈? xml version = 〃1· 0"encoding = 〃utf_8" ? >
      [0124] 〈dependencyObjects
      [0125] xmlns = "http://www. scottlogic. co. uk/DependencyObject"
      [0126] xmlns:xsi = 〃http://www. w3. org/2001/XMLSchema_instance">
      [0127] 〈dependencyOb ject name =,'RangeControl,'>
      [0128] <dependencyPropertyname = 〃Maximum〃type = 〃double〃defaultValue = "0·0"/>
      [0129] <dependencyPropertyname = 〃Minimum〃type = 〃double〃defaultValue = "0·0"/>
      [0130] </dependencyObject>
      [0131] 〈/dependencyObjects〉
      [0132] 在上述代碼中,dependencyObjects為上述XML的文件根節(jié)點, dependencyOb ject是定義依賴屬性的控件,RangeControl是控件名稱即上述目標類名稱, dependencyProperty是控件定義的依賴屬性,Maximum為依賴屬性的名稱即上述目標類屬 性,type指定依賴屬性的類型,defaultValue為依賴屬性的默認值,上述屬性分別對應目 標類中的各個屬性。
      [0133] 可選的,如圖4所示,上述獲取202單元可以包括:
      [0134] 讀取模塊2022,用于使用T4模板分別讀取目標類名稱和目標類屬性,獲取XML文 件中的至少一個對象的屬性值。
      [0135] 具體的,本發(fā)明實施例可以使用T4模板來將上述XML文件轉(zhuǎn)換成依賴屬性的代碼 文件,可以首先使用T4模板讀取上述XML文件中的目標類名稱,結(jié)合上述XML代碼,上述 目標類名稱可以是cbpendencyObject,然后讀取目標類屬性,結(jié)合上述XML代碼,上述目標 類名稱可以是 dependencyProperty,上述 XML 文件中的 RangeControl、Maximum、Minimum、 double 等為 dependencyProperty 的不同屬性值。
      [0136] 替換模塊2024,用于將XML文件中的屬性值替換目標代碼模板中的占位符,生成 目標代碼,其中,目標代碼模板為預先定義的模板。
      [0137] 具體的,上述目標代碼模板可以為依賴屬性的模板,例如下面的代碼:
      [0138] public partial class {2} { public static readonly DependencyProperty {0}Property = DcpcndcncyPropcrty,Rcgistcr(n !ypcof(! ?! K typeof({2|), new Properly Mctadata( {3}, {0} PropcrtyChangcCallback)); public |1Π 〇Ι get { return ({1 })GctValuc({0}Property); } set { SetValue({0}Property, value); } } partial sialic void {01 PropcriyChangcCal (hack (Dependency Objccl obj, DcpcndcncyProperlytliangcdlivcntArgs args); >
      [0139]
      [0140] 在上述代碼中,占位符0、1、2、3可以對應上述XML文件中的多個屬性。從上述模 板中可以看到第零個占位符為依賴屬性的名稱,第一個占位符為依賴屬性的類型,第二個 占位符為依賴屬性的擁有者,第三個占位符為依賴屬性的默認值。讀取到上述XML中多個 屬性值后,直接將上述四個占位符中替換即可。
      [0141] 可選的,上述獲取單元202還可以包括:
      [0142] 第二定義模塊2026,使用XSLT來定義匹配模板,上述匹配模板用于匹配XML文件。
      [0143] 具體的,本發(fā)明實施例可以使用述XSLT匹配上述XML文件的模板Template,這里 需要說明的是,在XSLT中Template,就是模板的意思,主要包含如下兩部分的定義:
      [0144] 1. match屬性:定義匹配的路徑,如果匹配到指定的路徑的話,就為這個路徑下的 內(nèi)容應用模板。
      [0145] 2.輸出內(nèi)容:輸出內(nèi)容中可以引用配置到路徑中的XML元素及其屬性,還可以為 這個路徑下的元素繼續(xù)應用其他模板。
      [0146] 生成模塊2028,用于使用XSLT獲取XML文件中至少一個屬性值,并應用到XML文 件的模板中,生成目標代碼。
      [0147] 具體的,首先,在定義匹配XML根元素的Template之后,可以在上述Template中 輸出命名空間定義,并為上述XML文件中dependencyobjecs下面的dependencyobject應 用T應用第二步定義的Template。
      [0148] 然后,定義匹配dependencyObject的Template,在該Template中輸出類定義。
      [0149] 最后,定義匹配 DependencyProperty 的 Template,在該 Template 中訪問 dependencyProperty元素的各個屬性,填充到上述模板即匹配XML文件的模板中,從而輸 出每個依賴屬性的定義。
      [0150] 上述步驟S1033至步驟S1034具體如下:
      [0151] <! 所,m XML通川的,-及明XML版本以及住11丨的':符編W--> <?xm丨 version^" 1.0** erKroding=**utr-8'"?>
      [0152] 4 <xsl:stylesheet vci*sioti="1 i)" xmlns:xsI=tfhtlp:/7www.w3[0rg/1999/XSL/Traiisfomi w xmlns;insxsl=,liirn;sch€mas-micros0rt-coin:xsltt, €xclude-result-prefi%ei-f,msxsr xnilnsrd^hUpi/Vwww.scoitlogic.co.uk/DcpcndcncyObjcct'^ <!輸丨H 3t ft 格Λ, fexi表小輸H i為純it木--> <xslmclhod^^lcxt"^ 瓜教WTempkUc% 這個Τα-kte之后_操作?是 W對?hi泰的,Λ找凡秦觀足相對> <!--?Μ? 很凡桌/? 小餓個 XiVIL 文+'1, -- dcpcndcncyObjccts idiv. Λ; XML Ψ 是不'Ρ?Λ?--> <jcil:temptale malch-7rt> <!一_下來兩行IMUlli,胃SM爾解為就是簡單_?!文本,爐_?*文本將來.eeft輸 山到11 te文傳中,Λ要不是ttlioft III?·是純文本,1£?輸m3M樣文#,卜+ Μ -> namespace DependencyProperty <"這繼表示處川κ板,虛麵+莫概分為兩歩,第一參aai攝定λ·?,即sdea 屬懷屮定義_內(nèi)《,*是先*? ctepenctetwyObjeas 元素 ,wail ctepeiidencfObjeet i素。第二慶是為每+ dependeneyObject '素 ΙΡΛ?Μβ板,也纔是 權(quán)* *槪Λ容鑛* %威文本,具#到》_ tt用W ?飯就<χ比teimptote match-'d:dcpcndoncyObjccr>3i 1V7C^ X -- :Β!β-> 〈! 一ft意 ctependeiieyObjecls 兀-秦卜-tl 含多個 depenctetieyCIbjeet 元素,廚以是多次 歲用,每+dependeney0bjett都輸111到這*,也就Λ將模橫?容輸!?!?Ι?·--> <xsl:app|y-lemplates select-Vd:dependeneyObjects/d:depejndetieyObj€ct7> </isl:leniplale> Bri ck|X;nckneyObjc:ct 1-- Tcmpiate, Ι? φ Wi & :SS 11' dcpcndcncyObj ccl J€ ft _,下衡_ <xs〗:vaHie-o Γ seleei="@^mefV>代表選# n猶le W/丨電* li.d為這個模飯是針對 dcpcndcncyObjcci τι:?* 所以 g| :? 選 ff: deperitbncyObji^l _ name M fl.:,針對我們的綱 Γ、 IB φ dcpcndcncyObjcci ^ name Μ?:Α RangcControI , β'? 以 Xf J .1、ifcjifL一-fj, 的代那么第-'4s dcpcndcncyObjcct 7ii# 1?; 1! A; public partial class RaagcConlrol ->
      [0153] <!-sdeet φ丨〗地代表滅冗射令,涵f義木^逛抱3 W性名恥 <xsl template malch"~',d:dcpcndencyObjcctt,> public partial class <xsl;va!uc-of sclcci-^tfrnamc51 { <!- ivf先找到dependencyObjccUiiH9?lVdependeneyPropcrty元素* 然后為每個元 'Mt)^ltl<xsl;tcmplatc malch=::::Md:dcpcndencyFropcr!y">#!K-> <xsl;apply-lcmplatcs sclcci^Hd;dcpcndcncyPrupcriyf7> } </xsi:template> <!--PC|C dependency Properly 0? Template* dependency Property τ? 素的,F(xiàn)fM6^<xsl:value-ofselect=n@*nameii />Λ# dependencyObjecl if} name 這 里特別汴意的是<xsl:vahie~〇r sdect="..%name" />*這里的雙點 一級元素 ,即 depaidaieyProperty 元 fH]勺卜一級元素 ,tli 就是 dependencyObject 元素 兩兩> <xsl:tcmplaic nialch=l'd:dcpcndcncyFropcrtyH> public static readonly DcpcndcncyPropcrty <xsI:valuc-of sc]cct=n@namcM />Propcrty - DcpcndcncyPropcriy.Rcgistcr(H<xsl:value?of sdect="(g:nanKf />' lypcoi(<xsI:valuc-of sclcct="@lypc,f l)?peof(<xsl:valuc-〇r sdcct="/(rt)namcH />), new PropertyMctadala(<xsl:valuc-of select^1*?dcfaultValucf, />5<x$l:vaIuc-of sclccl^M@namcM />PropertyChangeCaIIback)); publ.k <κ$1:¥Β?Μ?-ο?§€?£€?二**@lype" />sekeiy^mme11 /> i gel { return (<xsl;valuc-of sclccl=,t@lypc,t />)GciValuc(<xsi:valuc-〇r sclccl="@name" /々Property): } set ! SctValuc(<xsl:val?c-of seteet=f,@nameM/>Properiys value);} } partial static void <xsI:va!ue-of select-*@name" />PropertyChangeCallback (DependencyObject obj, DependencyPropertyChangedEventArgs args);
      [0154] </xsl:template> </isl:stylesheet>
      [0155] 可選的,本發(fā)明實施例提供的裝置還可以包括:
      [0156] 定義單元206,用于定義目標代碼模板,其中,目標代碼模板中包含至少一個屬性: 其中,至少一個屬性在目標代碼模板中使用不同的占位符替換。
      [0157] 可選的,本實施例相對于舊的技術(shù)方案,為修改依賴屬性提供了便利,說明了如何 簡化依賴屬性的生成和修改,但是該解決方案并不局限于依賴屬性,比如下面的例子也可 以使用該解決方案解決:
      [0158] public class Customer: INollfyProperlyChanged c private int racustomerId; public int C us tomerld { get { return ^customerldj} { _cyslomerId = valuer OnProper^Chaiiged(i,CiistomerId,f); } > public event ProperlyChangedEventHandbr Property Changed; protected virtual void OnPropertyChanged(string propertyName) c Prop erty Changed Eve ntHandler handler = Property Changed; if (handler != null) handler (this, new PropertyChangedEventArgs(properlyName))^ } }
      [0159] 這個例子中Customerld屬性的生成,和依賴屬性的生成同屬一類問題,即需要輸 入許多內(nèi)容,但是這些內(nèi)容大部分都是重復的,只有一小部分內(nèi)容是不一樣的。這個屬性的 生成也可以通過Visual Studio和Resharper提供的功能實現(xiàn),但是問題和依賴屬性的問 題是一樣的,即不支持修改。使用該解決方案,也可以解決類似于這樣的屬性的生成。
      [0160] 下面本申請結(jié)合具體場景進行描述:
      [0161] 1.添加 XML文件,該文件描述所有控件定義的依賴屬性,如下所示的實例:
      [0162] 〈? xml version =" 1. 0" encoding =" utf-8"? >
      [0163] 〈dependencyObjects
      [0164] xmlns = ''http ://www. scottlogic. co. uk/DependencyObject〃
      [0165] xmlns :xsi = ''http ://www. w3. org/2001/XMLSchema_instance">
      [0166] 〈dependencyObject name =,'RangeControl〃>
      [0167] <dependencyProperty name = ''Maximum " type = ''double " defaultValue = "0·0"/>
      [0168] <dependencyProperty name = ''Minimum " type = ''double " defaultValue = "0·0"/>
      [0169] </dependencyObject>
      [0170] </dependencyObjects>
      [0171] 1) dependencyOb jects 是文件根節(jié)點。
      [0172] 2) dependencyOb ject是定義依賴屬性的控件,name是控件名稱。
      [0173] 3) dependencyProperty是控件定義的依賴屬性,name為依賴屬性的名稱,type指 定依賴屬性的類型,defaultValue為依賴屬性的默認值。
      [0174] 2.將XML轉(zhuǎn)化為代碼文件,有兩種方式:T4模板和XSLT。
      [0175] 1)Τ4 模板
      [0176] i.讀取dependencyOb ject,下面模板中第2個占位符為其name屬性值。
      [0177] ii.讀取dependencyProperty,第0個占位符為其name屬性值,第1個占位符為 其type屬性值,第3個占位符為其defaultValue屬性值。
      [0178] Iii.使用上面解析的內(nèi)容填充下面的依賴屬性模板,上述依賴屬性的模板如下:
      [0179] public partial class {2} { public static readonly DependencyProperty {0}Property = DependencyProperty.Register("{0}", typeof({l})? %?peof({2})? new PropertyMetadata({3},{0}PropertyChangeCallback)); public {!}{0} { get {return ((l})GetValue({0}Properiy);} set { Set¥alue({0}Propei%# value);} } partial static void {OJPropertyChangeCallback (Dependenc^Object obj, DepencfencyPropertyChangedEventArgs args); }
      [0180]
      [0181] 2)使用 XSLT
      [0182] i.定義匹配根元素的Template,在該Template中輸出命名空間定義,并為根元素 下 dependencyObjects 節(jié)下 dependencyObject 節(jié)應用第二步定義的 Template
      [0183] ii.定義匹配dependencyObject的Template,在該Template中輸出類定義,并為 dependencyProperty 節(jié)應用第三步定義 Template
      [0184] iii.定義匹配 DependencyProperty 的 Template,在該 Template 中訪問 dependencyProperty元素的各個屬性,填充到模板中,從而輸出每個依賴屬性的定義
      [0185] 這里需要說明的是,在XSLT中Template,就是模板的意思,主要包含兩部分的定 義。
      [0186] 第一,match屬性:定義匹配的路徑,如果匹配到指定的路徑的話,就為這個路徑 下的內(nèi)容應用模板
      [0187] 第二,輸出內(nèi)容:輸出內(nèi)容中可以引用配置到路徑中的XML元素及其屬性,還可以 為這個路徑下的元素繼續(xù)應用其他模板
      [0188] 下面是使用上述XSLT將上述XML文件轉(zhuǎn)化成代碼的完整過程:
      [0189] <!一所jli XML通jU的,表明XML版本以及使川的卞符編if5-> <?xml version=,*1.0H encoding=,,utf-8,*?> <!-XSLT 根兒索-->
      [0190] <Ksts〇rfesheet ¥ersion=H xmlns;xsl=Mhtt4>://www.w3.org/1999/XSL/Transform H xmlris:msxsl-riurn:schemas-microsoft-com;xs]ti, exclude-result-prefixes=..msxsr xmlns:d=Mhttp;//www.scotttogic.co,uk/DepenttencyObject ,*> <!-輸出λ們的格式,text灰氺_出為純義本--> <xsI;output method="text"/> <!-4^1!擬兒索1% Tempbte,/灰承ΚΚΗ.--索*這1V Tempbte之后_操作都 :以I對根元素的,汽找允素 ik是相對i:很允素的-> <卜注表示整個 XML 義Γ!,+足 ctepenctencyObjects 元?, /丨:XML Φ是 不可 <xsl:tempbte match=Y__> <!一接K來W行是輸出,Μ以Η解為就足簡笮的純文木,這_純義木將散Ι?接輸 Hi到Π 標義件Is Μ要使丨U<>包W的都足純義本,Λ接輸出到Π_義件,F(xiàn)M--> namespace DependencyProperty c <!--這1表不晻用模扳,淹用模扳分為兩少,第…步找到指定冗素 ,Ι? select Μ性屮定義_內(nèi)容,ii體到這電,就是先找到(tependencyObjeds兀索,再找到 depencfencyObject元素,第.:步是為每個dependencyObject元蘂德碎用模K,Ik就是 根據(jù)模飯內(nèi)容繼維生成義:本,Λ體到這電使Π ] _模板就足<xsl:tempbte match="d:ctependencyObject"> 這個 7? 素定義的模飯--> <!-注意ctependencyObjects元素下包含多個ctepen也ncyObject元素,所以足多次 I、明〗,!則、ApendencyObject都輸!Η到這里,也就?將模K內(nèi)容輸出到這里-> <xsl:apply-tempbtes select=f7d:depenctency0bjects/d:dependency0bject!7> } </xsl:template> <!-^pendencyObjeet 的 Tempfate,這個模板都是針對 dependeneyObject 7亡 素的,下面的<xsl:value-ofsetect=M@nameH />代表選擇name屬性,W為這個模飯?zhí)?針對郵encfencyObJect兀索,所以就是選擇Apentaq,Object _ name Μ性,針對我 們的例子,第…個cfependencyObject元素 name屬性為RangeControl,所以對丁#下靣
      [0191] 第' 彳-/的代?ι'4,那么第…個 ctepenctencyObject 索輸 ?Π X/: public partial class RangeConti'ol --> <!-·select中的@代炎)411:選抒》文木為H體選#的M性名稱--> <xsktemplate match=,,d:ctependeiicyOblect,,> public partial cbss <xsl;value-of select="@nameH /> c jc iilM)tj<xshtemphte match=,,d:ctependencyFropertyll>fl>!K-> <xsl;apply-tempbtes setect=iid;dependencyProperty!y> } </xsl:tempbte> <!--Ι^Κ dependencyProperty fi{J Template,這個模板足針對 ctependencyProperty 元素 il(L F_ _<xsl:value-of sefcct=''@name" />選擇 ctepenctencyObject ii勺 narne _性, 這 3i特別注ft的足<xsl:value-of sefcct=H/@nameV>,點兮代喪 3 前兒韻 f:-級元素,Bf! ctependencyProperty 兒素的 I:-級兒素,〇2就楚 ctependencyObject λ: 餐-> <xsl:tempbte match="d;ifependencyProperty"> public static readonly DependencyProperty <xsl;value-of select=i,@namei, />Properly = Depen&ncyProperty.Register(H<xsl:value~of sefect="@name!l />'·, typeof(<xsl:value-of sefect=n@type" />), typeof(<xsl:value-of sebct=p/@nameH />)r new Property Meta da ta(<xsl:va!ue-of select: "?ctefaultValue" />,<xsl;value-of setect=M@nameH />PropertyChangeCa]lback)); public <xsI:¥alne-of sefe€t=,r@%fpe" /> <xsI;¥aIue-of sefect=,,@RameM /> { get { return (<xsl:va]iie?of sefect="@typeM />)GetValue(<xsI:value?of setect=f,@namef, />Property);} set{ Set¥aIue(<xsl:¥alue-of select^'^name11 />Property( value); } } partial static void <xs!;value-of select=H@nameM />Proper!yChangeCallback
      [0192] (DependencyObject obj, DependencyPropertyChangedEventArgs args); </xsl:template> </xsl;stylesheet>
      [0193] 需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列 的動作組合,但是本領(lǐng)域技術(shù)人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為 依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應該知 悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明 所必須的。
      [0194] 在上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部 分,可以參見其他實施例的相關(guān)描述。
      [0195] 在本申請所提供的幾個實施例中,應該理解到,所揭露的裝置,可通過其它的方式 實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種 邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可 以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間 的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接, 可以是電性或其它的形式。
      [0196] 所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯 示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個 網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目 的。
      [0197] 另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以 是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單 元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
      [0198] 所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用 時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì) 上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形 式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算 機設(shè)備(可為個人計算機、移動終端、服務器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所 述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、只讀存儲器(ROM,Read - Only Memory)、隨機存取存儲器(RAM, Random Access Memory)、移動硬盤、磁碟或者光盤等各種 可以存儲程序代碼的介質(zhì)。
      [0199] 以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技 術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修 改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
      【權(quán)利要求】
      1. 一種軟件的程序代碼的生成方法,其特征在于,包括: 添加 XML文件,其中,所述XML文件用于標記目標類的屬性特征,所述目標類為實現(xiàn)目 標功能的程序代碼; 獲取所述XML文件中至少一個對象的屬性值并通過所述XML文件中至少一個對象的屬 性值生成目標代碼; 將所述目標代碼輸出到所述XML文件中標記的所述目標類中。
      2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述添加 XML文件的步驟包括: 定義所述XML文件的對象,其中,所述XML文件包括以下至少一個對象:所述目標類名 稱、所述目標類屬性。
      3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,獲取所述XML文件中至少一個對象的 屬性值并通過所述XML文件中至少一個對象的屬性值生成目標代碼的步驟包括: 使用T4模板分別讀取所述目標類名稱和目標類屬性,獲取所述XML文件中的至少一個 對象的屬性值; 將所述XML文件中的屬性值替換目標代碼模板中的占位符,生成目標代碼,其中,所述 目標代碼模板為預先定義的模板。
      4. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,獲取所述XML文件中至少一個對象的 屬性值并通過所述XML文件中至少一個對象的屬性值生成目標代碼的步驟還包括: 使用XSLT來定義匹配模板,所述匹配模板用于匹配所述XML文件; 使用所述XSLT獲取所述XML文件的屬性值,并應用到所述匹配模板中,生成所述目標 代碼。
      5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在添加 XML文件之前,所述方法還包括: 定義目標代碼模板,其中,所述目標代碼模板中包含至少一個屬性:其中,所述至少一 個屬性在所述目標代碼模板中使用不同的占位符替換。
      6. -種軟件的程序代碼的生成裝置,其特征在于,包括: 添加單元,添加 XML文件,其中,所述XML文件用于標記目標類的屬性特征,所述目標類 為實現(xiàn)目標功能的程序代碼; 獲取單元,用于獲取所述XML文件中至少一個對象的屬性值并通過所述XML文件中至 少一個對象的屬性值生成目標代碼; 輸出單元,用于將所述目標代碼輸出到所述XML文件中標記的所述目標類中。
      7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述添加單元包括: 第一定義模塊,用于定義所述XML文件的對象,其中,所述XML文件包括以下至少一個 對象:所述目標類名稱、所述目標類屬性。
      8. 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述獲取單元包括: 讀取模塊,用于使用T4模板分別讀取所述目標類名稱和目標類屬性,獲取所述XML文 件中的至少一個對象的屬性值; 替換模塊,用于將所述XML文件中的屬性值替換目標代碼模板中的占位符,生成目標 代碼,其中,所述目標代碼模板為預先定義的模板。
      9. 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述獲取單元還包括: 第二定義模塊,用于使用XSLT來定義匹配模板,所述匹配模板用于匹配所述XML文 件; 生成模塊,用于使用所述XSLT獲取所述XML文件的屬性值,并應用到所述匹配模板中, 生成所述目標代碼。
      10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括: 定義單元,用于定義目標代碼模板,其中,所述目標代碼模板中包含至少一個屬性:其 中,所述至少一個屬性在所述目標代碼模板中使用不同的占位符替換。
      【文檔編號】G06F9/44GK104267966SQ201410545963
      【公開日】2015年1月7日 申請日期:2014年10月15日 優(yōu)先權(quán)日:2014年10月15日
      【發(fā)明者】馬燕龍 申請人:北京國雙科技有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1