六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

C#代表元及事件觸發

[摘要]代表元是C#中比較復雜的概念,C#中的代表元和C/C++中的函數指針非常相似使用代表元可以把代表元內部方法的引用封裝起來然后通過它使用代表元引用的方法。它有一個特性就是不需要知道被引用的方法屬于那一個類對象只要函數的參數個數與返回類型與代表元對象一致。這樣說可能比較抽象我下面舉幾個簡單的例子希望能...

代表元是C#中比較復雜的概念,C#中的代表元和C/C++中的函數指針非常相似使用代表元可以把代表元內部方法的引用封裝起來然后通過它使用代表元引用的方法。
它有一個特性就是不需要知道被引用的方法屬于那一個類對象只要函數的參數個數與返回類型與代表元對象一致。這樣說可能比較抽象我下面舉幾個簡單的例子希望能給廣大初學者一些基本的認識

//定義一個返回值為string的無參數的代表元注意這個代表元只能引用對象中返回值為string的無參數方法
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代替對象myClass1的SayHello方法
System.Console.WriteLine(myDelegate1());
//輸出結果為hello the world! 與調用myClass1.SayHello();效果相同
}
}
如果代表元只有這點功能它就沒有什么太大的用處了,代表元還有一個非常有用的功能就是定義復合代表元對象只有同樣類型的代表元才能夠復合起來 + 能定義復合代表元對象 - 從一個復合代表元中去掉一個代表元對象
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;
//這樣調用myDeletage就相當于同時調用了myClass1.SayHello和myClass1.SayGoodBye
myDelegate("love.net ");
//執行結果輸出love.net hello! love.net good bye!
}
}
事件驅動是windows應用程序的重要特征 C#代表元就是用于產生事件,事件就是用于在一個組件中監聽這個組件的變化
下面再舉一個簡單的例子
//定義一個事件代理(代表元)
public delegate void EventHandler(string str);
//定義事件源類
class EventSource
{
//定義代表元作為事件源類的成員
public event EventHandler Say;
public void TriggerEvent()
{
if(this.Say!=null)
//因為Say是個代表元所以執行Say方法所做的實際操作由注冊到它的事件處理函數決定
Say("A event take place!");
}
}
//測試
class Test
{
public static void Main()
{
EventSource aEventSource=new EventSource();
//注冊事件處理函數為MyEvent 顯示一串字符類似于this.Click+=new EventHandler(Button1_OnClick);
aEventSource.Say+=new EventHandler(MyEvent);
//此處為演示事件觸發過程所以就用程序自動觸發
//在圖形界面應用程序中,一般由用戶觸發事件,后由操作系統發送消息并調用處理函數 所以程序員只要注冊事件處理函數
//和編寫事件處理函數的代碼其他就不用關心了
aEventSource.TriggerEvent();
}
//事件處理函數
public static void MyEvent(string str)
{
System.Console.WriteLine(str);
}

}


 




主站蜘蛛池模板: 婷婷在线五月 | 亚洲欧美一区二区三区在线观看 | 伊人动漫 | 亚洲一区精品在线 | 日本视频一区二区三区 | 日本特黄特色aaa大片免费欧 | 亚洲福利网址 | 天天综合干| 手机看片日韩日韩国产在线看 | 天天色天天综合网 | 婷婷色网站 | 日韩欧美高清在线观看 | 日本高清视频免费看 | 中文字幕高清在线天堂网 | 正在播放一区二区 | 欧美亚洲另类自拍偷在线拍 | 色综合久久综合欧美综合网 | 在线不卡一区二区三区日韩 | 婷婷综合久久中文字幕 | 色碰视频 | 欧美性活一级视频 | 日韩三级a| 日韩a级片在线观看 | 婷婷丁香综合 | 日本视频免费 | 日韩视频在线免费 | 亚洲综合区 | 天天干天天拍天天操 | 五月激情网站 | 日本三级在在线观看 | 青娱极品盛宴国产一区 | 欧美亚洲一区二区三区在线 | 亚洲日本天堂在线 | 四川一级护士一级毛片 | 欧美视频在线免费看 | 欧美中文综合在线视频 | 色综合成人丁香 | 日韩 欧美 中文字幕 不卡 | 天天天天天天天操 | 综合欧美亚洲 | 亚洲欧美日韩高清一区二区三区 |