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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#代表元及事件觸發(fā)

2019-11-18 19:48:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

代表元是C#中比較復(fù)雜的概念,C#中的代表元和C/C++中的函數(shù)指針?lè)浅O嗨剖褂么碓梢园汛碓獌?nèi)部方法的引用封裝起來(lái)然后通過(guò)它使用代表元引用的方法。
它有一個(gè)特性就是不需要知道被引用的方法屬于那一個(gè)類(lèi)對(duì)象只要函數(shù)的參數(shù)個(gè)數(shù)與返回類(lèi)型與代表元對(duì)象一致。這樣說(shuō)可能比較抽象我下面舉幾個(gè)簡(jiǎn)單的例子希望能給廣大初學(xué)者一些基本的認(rèn)識(shí)

//定義一個(gè)返回值為string的無(wú)參數(shù)的代表元注意這個(gè)代表元只能引用對(duì)象中返回值為string的無(wú)參數(shù)方法
delegate string MyDelegate();
public class MyClass
{
public string SayHello()
{
return "Hello the world!";
}

}
public class TestMyClass
{
public static void Main(string[] args)
{
MyClass myClass1=new MyClass();
MyDelegate myDelegate1=new MyDelegate(myClass1.SayHello);
//下面就使用myDelegate1代替對(duì)象myClass1的SayHello方法
System.Console.WriteLine(myDelegate1());
//輸出結(jié)果為hello the world! 與調(diào)用myClass1.SayHello();效果相同
}
}
如果代表元只有這點(diǎn)功能它就沒(méi)有什么太大的用處了,代表元還有一個(gè)非常有用的功能就是定義復(fù)合代表元對(duì)象只有同樣類(lèi)型的代表元才能夠復(fù)合起來(lái) + 能定義復(fù)合代表元對(duì)象 - 從一個(gè)復(fù)合代表元中去掉一個(gè)代表元對(duì)象
delegate void MyDelegate(string s);
public class MyClass
{
public void SayHello(string who)
{
System.Console.WriteLine( who+"hello!");
}
public void SayGoodBye(string who)
{
System.Console.WriteLine( who+"good bye!");
}

}

public class TestMyClass
{
public static void Main(string[] args)
{
MyClass myClass1=new MyClass();
MyDelegate myDelegate,myDelegate1;
myDelegate=new MyDelegate(myClass1.SayHello);
myDelegate1=new MyDelegate(myClass1.SayGoodBye);
myDelegate+=myDelegate1;
//這樣調(diào)用myDeletage就相當(dāng)于同時(shí)調(diào)用了myClass1.SayHello和myClass1.SayGoodBye
myDelegate("love.net ");
//執(zhí)行結(jié)果輸出love.net hello! love.net good bye!
}
}
事件驅(qū)動(dòng)是windows應(yīng)用程序的重要特征 C#代表元就是用于產(chǎn)生事件,事件就是用于在一個(gè)組件中監(jiān)聽(tīng)這個(gè)組件的變化
下面再舉一個(gè)簡(jiǎn)單的例子
//定義一個(gè)事件代理(代表元)
public delegate void EventHandler(string str);
//定義事件源類(lèi)
class EventSource
{
//定義代表元作為事件源類(lèi)的成員
public event EventHandler Say;
public void TriggerEvent()
{
if(this.Say!=null)
//因?yàn)镾ay是個(gè)代表元所以執(zhí)行Say方法所做的實(shí)際操作由注冊(cè)到它的事件處理函數(shù)決定
Say("A event take place!");
}
}
//測(cè)試
class Test
{
public static void Main()
{
EventSource aEventSource=new EventSource();
//注冊(cè)事件處理函數(shù)為MyEvent 顯示一串字符類(lèi)似于this.Click+=new EventHandler(Button1_OnClick);
aEventSource.Say+=new EventHandler(MyEvent);
//此處為演示事件觸發(fā)過(guò)程所以就用程序自動(dòng)觸發(fā)
//在圖形界面應(yīng)用程序中,一般由用戶(hù)觸發(fā)事件,后由操作系統(tǒng)發(fā)送消息并調(diào)用處理函數(shù) 所以程序員只要注冊(cè)事件處理函數(shù)
//和編寫(xiě)事件處理函數(shù)的代碼其他就不用關(guān)心了
aEventSource.TriggerEvent();
}
//事件處理函數(shù)
public static void MyEvent(string str)
{
System.Console.WriteLine(str);
}

}


 


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平原县| 林甸县| 苗栗市| 河曲县| 西城区| 海阳市| 乾安县| 孙吴县| 绿春县| 磐石市| 民勤县| 肃宁县| 尚志市| 敖汉旗| 平罗县| 图木舒克市| 彭阳县| 松溪县| 陵水| 盘山县| 兴宁市| 锡林郭勒盟| 六枝特区| 横山县| 牡丹江市| 英山县| 荣昌县| 泸定县| 织金县| 丹凤县| 曲阜市| 汉川市| 丰都县| 赞皇县| 汉中市| 台东市| 邵武市| 登封市| 苍梧县| 阳城县| 黄石市|