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

首頁 > 編程 > .NET > 正文

.net 有關(guān)多態(tài)性的學(xué)習(xí)筆記。

2024-07-10 12:59:14
字體:
供稿:網(wǎng)友
將派生類對象指派給基類引用。程序要想多態(tài)性的處理對象,這是非常基本的部分。
所謂引用就是聲明數(shù)據(jù)類型。
然后就是實例化。“new”.
派生類引用指派給基類引用:point = circle
此時如果調(diào)用point的方法,因為將派生類引用指派給基類引用,所以是circle的方法
而不是point的方法。
將基類對象指派給派生類引用(無強(qiáng)制類型轉(zhuǎn)換),會發(fā)生語法錯誤。
派生類引用指派給基類引用,可通過強(qiáng)制類型轉(zhuǎn)換,只有這樣才能向那個對象發(fā)送未在
基類中出現(xiàn)的消息。(表示調(diào)用一個對象的方法和屬性)
因為派生類包含與基類對象所有成員對應(yīng)的成員,但派生類還可能有附加成員。所以,
不進(jìn)行顯式的強(qiáng)制類型轉(zhuǎn)換,就不能將基類的引用指派給派生類引用。option strict
在on 的狀態(tài)。否則,附加的派生類成員會]進(jìn)入未定義的狀態(tài)。

不會實例化任何對象的類,稱為抽象類。(mustinherit)
所以,派聲類必須覆蓋繼承抽象的方法和屬性,使那些派生類的對象被實例化。
例如:有人讓你畫一個形狀,那么具體畫什么形狀呢?具體類提供這些細(xì)節(jié)。
許多良好的面向?qū)ο蟮南到y(tǒng)都用mustinherit積累開始以各類層次結(jié)構(gòu)。有時要占據(jù)類
層次結(jié)構(gòu)頂部的好幾個級別。
關(guān)鍵字mustoverride可將一個方法和屬性聲明為抽象的。每個派生類必須覆蓋所有的
mustoverride方法和屬性。使用關(guān)鍵字(overrides)
mustoverride和overridable方法區(qū)別在于,后者有具體的方法實現(xiàn)。并允許派生類
覆蓋。而前者沒有具體實現(xiàn),并且派生類必須要覆蓋其方法和屬性。
在面向?qū)ο缶幊蹋?jīng)常要用到迭代器類。它能便利容器(比如數(shù)組)內(nèi)所有對象
例如:
dim arrayofshapes as cshape() = new shape(2)
arrayofshapes(0) = point
arrayofshapes(0) = circle
arrayofshapes(0) = cylinder(圓柱)
dim shape as cshape
for each shape in arrayofshapes
next
創(chuàng)建和使用接口:
接口指定了類必須是實現(xiàn)的一系列public服務(wù)(也就是方法和屬性)。
接口要用關(guān)鍵字interface開頭,要使用接口,類必須指出實現(xiàn)了自己的implments
接口。
可讓接口提供一個屬性和方法,讓這些類的對象來實現(xiàn),已返回每個對象的方法或?qū)傩浴?br>委托:
在事件通信中,事件發(fā)送方類不知道哪個對象或方法將接收到(處理)它引發(fā)的事件。
所需要的是在源和接收方之間存在一個媒介(或類似指針的機(jī)制)。.net framework
定義了一個特殊的類型(delegate),該類型提供函數(shù)指針的功能。
委托是一個可以對方法進(jìn)行引用的類。與其他的類不同,委托類具有一個簽名,并且它只能
對與其簽名匹配的方法進(jìn)行引用。這樣,委托就等效于一個類型安全函數(shù)指針或一個回調(diào)。
委托是一種引用類型,它引用類型的 shared 方法或?qū)ο蟮膶嵗椒āT谄渌Z言中,
與委托最接近的是函數(shù)指針,但函數(shù)指針只能引用 shared 函數(shù),而委托可以引用 shared
和實例方法。在后一種情況中,委托不僅存儲對方法入口點的引用,還存儲對用于調(diào)用方法
的對象實例的引用。
自己理解:委托其實質(zhì)就是一個方法的地址,通過它可以找到這個方法,并使用它。
這個在多線程的編程中使用到。
例子:
delegate sub mysubdelegate(x as integer)
protected sub test()
dim c2 as new class2()
' test the delegate.
c2.delegatetest()
end sub

class class1
sub sub1(byval x as integer)
messagebox.show("the value of x is: " & cstr(x))
end sub
end class

class class2
sub delegatetest()
dim c1 as class1
dim msd as mysubdelegate
c1 = new class1
' create an instance of the delegate.
msd = addressof c1.sub1
msd(x) ' call the method.
end sub
end class

委托傳遞參數(shù):委托的參數(shù)傳遞給class1.sub1的參數(shù),通過這里可以看出。
還有一種方式,但不能傳遞參數(shù)。
dim msd as new methodinvoke(addressof 方法名)
調(diào)用時 msd.invoke
委托結(jié)合線程使用。





注冊會員,創(chuàng)建你的web開發(fā)資料庫,
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 温州市| 布尔津县| 乌兰察布市| 关岭| 江源县| 贵港市| 昭通市| 大洼县| 剑川县| 双鸭山市| 习水县| 旌德县| 厦门市| 洞口县| 乌鲁木齐县| 桃源县| 盱眙县| 嵊泗县| 旌德县| 信宜市| 新余市| 北辰区| 丰顺县| 麦盖提县| 乐至县| 静安区| 紫阳县| 巢湖市| 安龙县| 东丰县| 龙口市| 深州市| 平塘县| 津南区| 林周县| 湄潭县| 庆城县| 泗阳县| 枣阳市| 万山特区| 克拉玛依市|