大家知道委託就相當於c++裡面的函式指標,相信大家都很很了解,看看如下簡單**來回想一下委託
publicdelegate
void
ad();
xu xus
=new
xu();
ad b
=new
ad(xus.add);
b +=
xus.ex;
b();
console.readline();
classxupublic
void
ex()}
這裡我們看見 定義了乙個add 的委託沒有引數沒有返回值 然後把委託指向add 和ex 兩個方法(多播委託) 然後執行b() 執行之後 結果大家應該知道 就是執行了這2個方法列印出 "ssssssssssssss"於"aaaaaaaaaaaaaaaa"。那如果變成下面這個形式呢?
publicdelegate
intad(
intx,
inty);
static
void
main(
string
args)
;console.writeline(a(3,
2));
console.readline();
}static
intadd(
intx,
inty)
static
intex(
intx,
inty)}
這段** 也是執行乙個多播委託 但是輸出的結果會是什麼樣的呢 答案是 輸出1,為什麼前面那個委託會輸出2個方法 而這個委託只會輸出第二個方法的返回值?如果我們也想輸出2個返回值怎麼辦呢?其實很簡單 **如下
publicdelegate
intad(
intx,
inty);
static
void
main(
string
args)
;delegate d
=a.getinvocationlist();
for (
inti =0
; i
<
d.length; i++)
}console.readline();
}static
intadd(
intx,
inty)
static
intex(
intx,
inty)}
這裡我們使用了乙個getinvocationlist 方法來返回多播委託的呼叫列表 然後轉化ad 然後迴圈呼叫 最後顯示的結果就是5,1。委託的 複習我們就看到這裡 現在回到正題 看看委託的非同步呼叫。
publicdelegate
intad(
intx,
inty);
static
void
main(
string
args)
static
intadd(
intx,
inty)
執行這段** 會先停頓2秒鐘之後再顯示6 和start 因為我使用了sleep這個方法 它使該執行緒休眠2秒鐘,所以會在2秒之後顯示資訊,但是這對使用者體驗來說是非常糟糕的,那我們怎麼改善呢?看看如下**
publicdelegate
intad(
intx,
inty);
static
void
main(
string
args)
int s
=a.endinvoke(isa);
console.writeline(s.tostring());
console.readline();
}static
intadd(
intx,
inty)
static
intex(
intx,
inty)
這裡我們使用了begininvoke方法來非同步執行 委託方法返回乙個iasyncresult 型別的值 代表委託執行的狀態,使用乙個while迴圈 來判斷iscompleted 如果沒有完成非同步呼叫則不斷顯示「未完成」 如果完成endinvoke 則返回結果。但是這裡需要不斷的詢問操作完成狀態 那麼我們怎樣讓委託非同步呼叫完成之後主動通知我們呢? 看看如下**
publicdelegate
intad(
intx,
inty);
static
void
main(
string
args)
console.readline();
}static
void
call(iasyncresult isa)
, "
,a.endinvoke(isa),ar.asyncstate);
}static
intadd(
intx,
inty)
static
intex(
intx,
inty)}
這裡我們使用了乙個call方法 注意它是沒有返回值的。把iasyncresult轉換成asyncresult注意少了個i然後轉換成ad 型別的委託 最後endinvoke 來返回值 這樣在委託非同步執行完成之後會自動通知方法。呵呵 好了今天就說到這裡吧。如果有說的不對的地方歡迎指正 大家一起學習一起進步。
C 基礎之委託
委託常常和事件在一起使用,可以理解委託是方法的容器,事件則是委託的另一種表現形式。委託和事件雖然寫得還比較多,不過也只是用的熟練而已,趁週末沒課好好鞏固下基礎,一點一點積累吧。1.乙個簡單的小例子 class program class people public void eatpear stri...
C 基礎之委託
因為委託也是面試常常問道的問題,分享一下我的理解。為什麼使用委託。delegate void mydelegate 定義委託 mydelegate md 宣告委託 md new mydelegate obj.method 委託的例項化 mymethod d 把引數傳遞給方法 委託把方法當做引數傳到另...
c 委託非同步實現
同步執行模式,是指語句在同步執行模式下,將始終保持對程式流的控制,直至程式結束。例如查詢操作,客戶機上的應用程式在向伺服器發出查詢操作的指令後,將一直等待伺服器將查詢結果返回客戶機端後,才繼續進行下一步操作 非同步執行模式,是指語句在非同步執行模式下,各語句執行結束的順序與語句執行開始的順序並不一定...