• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于C#的對象間數(shù)據(jù)傳遞方法分析及實現(xiàn)

      2011-08-08 12:48:16陳南南
      電腦與電信 2011年11期
      關鍵詞:窗體字號控件

      陳南南

      (廈門大學嘉庚學院, 福建 廈門 363105)

      1.引言

      在面向過程的結構化編程中,數(shù)據(jù)傳遞通常以函數(shù)間的參數(shù)傳遞方式實現(xiàn)。但在面向?qū)ο蟮氖录?qū)動機制的編程模式中,由于類的存在,使得數(shù)據(jù)更多地是在對象間進行傳遞。特別是在多窗體程序中,窗體間的數(shù)據(jù)傳遞更加頻繁。因此,如何規(guī)范安全地實現(xiàn)不同對象間的數(shù)據(jù)傳遞成為關鍵。

      2.窗體間的數(shù)據(jù)傳遞

      在面向?qū)ο缶幊讨?,本類中的函?shù)參數(shù)傳遞方法與面向過程的編程方法類似,本文就不進行闡述了。為了更直觀地了解數(shù)據(jù)在不同對象間的傳遞,下文以一個基于C#的多窗體小程序為例,分析程序中出現(xiàn)的

      幾種數(shù)據(jù)傳遞方法。如圖1所示,F(xiàn)orm1中,點擊字號按鈕后,顯示Form2窗體,由該窗體中的滑動條控制Form1中標簽控件中的文本字號,滑動條當前value值為標簽控件中當前字號大小值。這個小實例雖然簡單,但其中包含了幾種典型的數(shù)據(jù)傳遞方式,這幾種方式可以分成兩個階段:主窗體向從窗體傳遞、從窗體向主窗體傳遞。

      圖1 實例截圖

      3.主窗體向從窗體傳遞

      Form1與Form2分屬不同的類,在不同的類對象間進行參數(shù)傳遞,主要有以下幾種方式。

      3.1 設置類的靜態(tài)變量

      在類定義過程中定義一個靜態(tài)變量,在不同類對象中應用時可以直接用類名引用該變量,這種方式實現(xiàn)簡單,但不符合面向?qū)ο蟮姆庋b思想,而且不同的類對象只能共用該變量,無“個性”。在本例中不適用。

      3.2 構造函數(shù)參數(shù)傳遞

      本例中,F(xiàn)orm2顯示時需要接收主窗體傳遞過來的主窗體對象參數(shù)以及標簽當前字號值。在Form2中設置一個public的有參數(shù)構造函數(shù)。

      在Form1中點擊字號按鈕創(chuàng)建Form2對象時,在按鈕單擊事件處理函數(shù)中通過構造函數(shù)傳遞參數(shù),F(xiàn)orm2 f2=new Form2(this,(int)label1.Font.Size)。

      使用構造函數(shù)傳遞參數(shù)實現(xiàn)簡單,適合與傳遞對象建立時所需的初始值。但這種方式只能是一次性傳遞,下次再用構造函數(shù)傳遞參數(shù)時,傳遞的目標是一個新的對象,而不是原來的從窗體了。

      3.3 使用屬性傳遞

      當需要多次從主窗體中接收數(shù)據(jù)時,可以在從窗體中定義一個public變量,在主窗體中用對象名.變量名的格式進行賦值傳遞,但這種方式不符合面向?qū)ο缶幊趟枷胫蟹庋b性原則,且不安全。所以可以在從窗體中定義一個public類型的可讀寫屬性,在主窗體中用對象名.屬性名的格式進行讀寫設置,具體實現(xiàn)方法在本例中不做詳細實現(xiàn)。

      4.從窗體向主窗體傳遞

      在從窗體創(chuàng)建并顯示后,根據(jù)滑動條的左右滑動,修改主窗體中標簽文本字號,這就需要從窗體向主窗體傳遞滑動條的Value屬性值。有兩種實現(xiàn)方法:

      4.1 設置控件Modifiers屬性

      將主窗體Form1中的標簽Label1控件的modifiers屬性由Private改為Public,這樣就可以在從窗體的相應事件處理函數(shù)中對標簽控件的Font屬性進行直接賦值修改。

      但從面向?qū)ο蟪绦虻姆庋b性及安全性考慮,隨意修改類成員的訪問權限是不可靠的。所以最佳辦法應該利用委托與事件的消息訂閱機制來傳遞數(shù)據(jù)。

      4.2 委托與事件

      委托與事件是面向?qū)ο缶幊趟枷胫械闹匾拍钪?,也是最不易理解的概念之一。委托在功能上它類似C語言的函數(shù)指針,目的是通過創(chuàng)建委托類型對象去調(diào)用函數(shù)。而事件則是一種特殊的委托,事件能完成的委托也能夠完成,但事件的封裝性及安全性要求更高,是一種特制的更為專業(yè)化的委托。二者的主要區(qū)別在于:第一,事件只能在本類以外用“+=”和“-=”去訂閱/取消訂閱代理,委托不管在本類外部還是內(nèi)部都可以用“+=”、“-=”和“=”訂閱 /取消訂閱代理;第二,事件只能在本類內(nèi)部“觸發(fā)”,委托不管在本類內(nèi)部還是外部都可以“調(diào)用”。即:事件,只有本類才能激發(fā)這個事件。

      C#是面向?qū)ο蟮氖录?qū)動的編程工具,.net Framework的事件機制使得編程更加快捷簡便。大部分初學者在使用系統(tǒng)控件的各種事件時都熟悉得很快,但在對自定義事件的具體定義、訂閱以及觸發(fā)過程卻往往一知半解。下面我們就利用數(shù)據(jù)傳遞過程簡單介紹事件的處理步驟。

      在本例中當從窗體Form2中的滑動條發(fā)生滑動后,立即向主窗體發(fā)生當前value屬性值作為標簽字號,因此需要首先定義一個委托類型,然后在Form2中定義一個關于該委托類型的事件,并在滑動條的滑動事件處理過程中觸發(fā)該事件。

      public delegate void sendfontsize(int fs);//聲明委托,代表無返回值,參數(shù)為整型的函數(shù)

      public partial class Form2:Form

      {public event sendfontsize send;//定義事件,為上述委托類型

      5.結論

      由于C#的開發(fā)工具Visual Studio功能過于強大,在方便我們編程工作的同時,也隱藏了許多相對基礎的底層概念及操作,使得許多初學者對面向?qū)ο蟮脑S多概念更難以理解其中的具體定義及使用過程,希望本文能對讀者有所幫助,加深對相關概念的理解。

      [1](美)Stephen C.Perry著.C#和.NET核心技術[M].肖斌,王小振等譯.北京:機械工業(yè)出版社,2007.

      [2]明日科技編著.Visual C#開發(fā)技術大全[M].北京:人民郵電出版社,2007.

      [3]蘇杭麗.C#中數(shù)據(jù)傳遞方式的教學模型設計[J].計算機時代,2011,(03).

      猜你喜歡
      窗體字號控件
      黃山徽字號雕刻有限公司
      秀江南(2022年2期)2022-04-29 00:44:03
      實施農(nóng)產(chǎn)品質(zhì)量提升行動 擦亮晉字號特優(yōu)農(nóng)業(yè)品牌
      規(guī)范“消字號”產(chǎn)品 增強用藥安全
      公民與法治(2020年7期)2020-05-11 02:14:26
      試談Access 2007數(shù)據(jù)庫在林業(yè)檔案管理中的應用
      檔案天地(2019年5期)2019-06-12 05:12:02
      關于.net控件數(shù)組的探討
      軟件(2018年7期)2018-08-13 09:44:42
      關于企業(yè)字號權及其保護的法律思考
      法制博覽(2017年18期)2017-01-27 00:07:34
      基于LayeredWindow的異形窗體局部刷新
      中文信息(2014年2期)2014-03-06 23:49:14
      巧設WPS窗體控件讓表格填寫更規(guī)范
      就這樣玩會VBA中常見的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      WinCE.net下圖形用戶界面的開發(fā)
      阳曲县| 山西省| 大兴区| 合江县| 专栏| 南川市| 英德市| 文成县| 阿合奇县| 沂南县| 集贤县| 定日县| 田东县| 淄博市| 同心县| 卢湾区| 秀山| 霍邱县| 安顺市| 双辽市| 富民县| 建昌县| 红河县| 怀柔区| 加查县| 静乐县| 泰宁县| 金塔县| 翼城县| 成武县| 绥德县| 贵德县| 济宁市| 镇坪县| 崇礼县| 望奎县| 富裕县| 始兴县| 大埔县| 巴里| 钟祥市|