999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C#的對象間數據傳遞方法分析及實現

2011-08-08 12:48:16陳南南
電腦與電信 2011年11期
關鍵詞:定義

陳南南

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

1.引言

在面向過程的結構化編程中,數據傳遞通常以函數間的參數傳遞方式實現。但在面向對象的事件驅動機制的編程模式中,由于類的存在,使得數據更多地是在對象間進行傳遞。特別是在多窗體程序中,窗體間的數據傳遞更加頻繁。因此,如何規范安全地實現不同對象間的數據傳遞成為關鍵。

2.窗體間的數據傳遞

在面向對象編程中,本類中的函數參數傳遞方法與面向過程的編程方法類似,本文就不進行闡述了。為了更直觀地了解數據在不同對象間的傳遞,下文以一個基于C#的多窗體小程序為例,分析程序中出現的

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

圖1 實例截圖

3.主窗體向從窗體傳遞

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

3.1 設置類的靜態變量

在類定義過程中定義一個靜態變量,在不同類對象中應用時可以直接用類名引用該變量,這種方式實現簡單,但不符合面向對象的封裝思想,而且不同的類對象只能共用該變量,無“個性”。在本例中不適用。

3.2 構造函數參數傳遞

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

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

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

3.3 使用屬性傳遞

當需要多次從主窗體中接收數據時,可以在從窗體中定義一個public變量,在主窗體中用對象名.變量名的格式進行賦值傳遞,但這種方式不符合面向對象編程思想中封裝性原則,且不安全。所以可以在從窗體中定義一個public類型的可讀寫屬性,在主窗體中用對象名.屬性名的格式進行讀寫設置,具體實現方法在本例中不做詳細實現。

4.從窗體向主窗體傳遞

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

4.1 設置控件Modifiers屬性

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

但從面向對象程序的封裝性及安全性考慮,隨意修改類成員的訪問權限是不可靠的。所以最佳辦法應該利用委托與事件的消息訂閱機制來傳遞數據。

4.2 委托與事件

委托與事件是面向對象編程思想中的重要概念之一,也是最不易理解的概念之一。委托在功能上它類似C語言的函數指針,目的是通過創建委托類型對象去調用函數。而事件則是一種特殊的委托,事件能完成的委托也能夠完成,但事件的封裝性及安全性要求更高,是一種特制的更為專業化的委托。二者的主要區別在于:第一,事件只能在本類以外用“+=”和“-=”去訂閱/取消訂閱代理,委托不管在本類外部還是內部都可以用“+=”、“-=”和“=”訂閱 /取消訂閱代理;第二,事件只能在本類內部“觸發”,委托不管在本類內部還是外部都可以“調用”。即:事件,只有本類才能激發這個事件。

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

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

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

public partial class Form2:Form

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

5.結論

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

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

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

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

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統計概率解答題
例談橢圓的定義及其應用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
嚴昊:不定義終點 一直在路上
華人時刊(2020年13期)2020-09-25 08:21:32
定義“風格”
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定義快修連鎖
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 亚洲人在线| 88国产经典欧美一区二区三区| 国内精自视频品线一二区| 992tv国产人成在线观看| 久久久久久高潮白浆| 波多野结衣的av一区二区三区| 亚洲第一成网站| 欧美精品在线视频观看| 日韩在线第三页| 国产精品第一区| 婷婷六月综合| 久久semm亚洲国产| 欧美在线一级片| 久久大香伊蕉在人线观看热2| 国产精品美女网站| 伊人久久婷婷| 国内毛片视频| 国产精品2| 欧美劲爆第一页| 日韩毛片免费| 久久综合一个色综合网| 九色在线观看视频| 日本成人不卡视频| 40岁成熟女人牲交片免费| 国产丰满大乳无码免费播放| 中文一级毛片| 国产永久在线观看| 亚洲三级a| 国产原创自拍不卡第一页| 国产精品久久久久久久久| 青青青伊人色综合久久| 综合成人国产| 久久国产精品娇妻素人| 欧美一区二区人人喊爽| 尤物亚洲最大AV无码网站| 黄色污网站在线观看| 国产亚洲美日韩AV中文字幕无码成人| a毛片在线免费观看| 亚洲第一黄色网址| 99热这里只有精品免费| 亚洲无码高清一区| 日韩在线第三页| 国产成人综合网| 91视频青青草| 亚洲乱码视频| 欧美国产菊爆免费观看| 一区二区在线视频免费观看| 99久久精品国产自免费| 国产欧美中文字幕| 激情视频综合网| 国产精品成人第一区| 亚洲欧美日韩另类在线一| 一本无码在线观看| 婷婷开心中文字幕| 亚洲国产午夜精华无码福利| 国产剧情国内精品原创| www.91在线播放| 国产精品成| 国产精品深爱在线| 国产国产人在线成免费视频狼人色| 青青青国产在线播放| 亚洲Av激情网五月天| 亚洲综合色婷婷中文字幕| 亚洲毛片一级带毛片基地| 精品久久人人爽人人玩人人妻| 欧洲欧美人成免费全部视频| 在线观看亚洲成人| 色男人的天堂久久综合| 久久久久亚洲av成人网人人软件| 国产在线精品人成导航| 四虎永久免费在线| 91精品啪在线观看国产91九色| jizz国产视频| 人妻熟妇日韩AV在线播放| 免费观看成人久久网免费观看| 久久夜色精品| 欧美一级在线| 亚洲精品在线91| 国产视频久久久久| 国产精品永久在线| 国产免费怡红院视频| 伊人婷婷色香五月综合缴缴情|