C# 兩個類間傳遞消息

来源:https://www.cnblogs.com/leemano/archive/2023/01/13/17050266.html
-Advertisement-
Play Games

運行環境:Window10,.Net7.0; 編者:烏龍哈里 2023-01-13 經常碰到兩個控制項需要相互傳遞消息,這時候需要用到事件。比如現有兩個類如下: class AA { private string Text = "AA"; public void SetText(string s) { ...


運行環境:Window10,.Net7.0; 編者:烏龍哈里 2023-01-13


經常碰到兩個控制項需要相互傳遞消息,這時候需要用到事件。比如現有兩個類如下:

class AA
{
    private string Text = "AA";

    public void SetText(string s)
    {
        Text = s;
    }
    public void Show()
    {
        Console.WriteLine(Text);
    }
}

class BB
{
    private string Text = "BB";
    public void OnClick()
    {

    }
}

我們需要 BB.OnClick() 後把 AA 的 Text 欄位內容變成 BB.Text 的內容。這時候需要事件。事件按我的理解就是把 AA 的一個方法弄到 BB 內執行。在本文中就是 BB 也能執行 AA.SetText(string s) 這個方法。
在BB類內改造步驟:
1、根據 AA類的方法 void SetText(string s) 在 BB類 中聲明一個代理 public delegate void SetValue(string s);
2、再把代理聲明成事件 public event SetValue SetValueEvent;
3、最後,在 BB 類的 OnClick() 方法中運行事件。
改完的 BB 類如下:

class BB
{
    private string Text = "BB";

    public delegate void SetValue(string s);
    public event SetValue? SetValueEvent;

    public void OnClick()
    {
        if (SetValueEvent != null)
        {
            SetValueEvent(Text);
        }
    }
}

 


整體運行如下:

var aa = new AA();
var bb = new BB();

aa.Show();//=>輸出:AA
//把 BB 的事件綁定到 AA 的 SetText 方法
bb.SetValueEvent += aa.SetText;

//運行 BB 調用事件的方法 OnClick()
bb.OnClick();

aa.Show();//=>輸出:BB。aa.Text 的內容已經改變成 BB 了

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開發者賬號 首先需要註冊一個開發者賬號,不然什麼都免談。在手機Apple Developer上註冊給錢就行了,個人開發者一年688元。 打包App App開發好後,就可以通過XCode打包。打包前選好版本號,不要跟以前提交的一樣,重覆的Version和Build是無法提交的。當然第一次打包就不可能會 ...
  • 2023-01-18 一、Spring中的AOP 1、AspectJ (1)簡介 Java社區里最完整最流行的AOP框架 在Spring2.0以上版本中,可以使用AspectJ註解或基於XML配置的AOP (2)使用AspectJ步驟 ①在spring核心包的基礎上添加支持jar包 <!-- htt ...
  • 本文介紹基於Python語言,將一個Excel表格文件中的數據導入到Python中,並將其通過字典格式來存儲的方法。 我們以如下所示的一個表格(.xlsx格式)作為簡單的示例。其中,表格共有兩列,第一列為學號,第二列為姓名,且每一行的學號都不重覆;同時表格的第一行為表頭。 假設我們需要將第一列的學號 ...
  • 我國目前並未出台專門針對網路爬蟲技術的法律規範,但在司法實踐中,相關判決已屢見不鮮,K 哥特設了“K哥爬蟲普法”專欄,本欄目通過對真實案例的分析,旨在提高廣大爬蟲工程師的法律意識,知曉如何合法合規利用爬蟲技術,警鐘長鳴,做一個守法、護法、有原則的技術人員。 案情介紹 2019年8、9月期間,被告人袁 ...
  • 2023-01-18 一、AOP前奏-代理模式 1、手動實現動態代理環境搭建 (1)基於介面實現動態代理:JDK動態代理 (2)基於繼承實現動態代理:Cglib、javassist動態代理 2、實現動態代理的步驟 (1)一個類:Proxy ①概述:Proxy代理類的基類(類似於Object) ②作用 ...
  • 1 簡介 Solace是一個強大的實時性的事件驅動消息隊列。本文將介紹如何在Spring中使用,雖然代碼使用的是Spring Boot,但並沒有使用相關starter,跟Spring的整合一樣,可通用。JMS是通過的消息處理框架,可以深入學習一下,不同的MQ在JMS的整合上都是類似的。 2 通過Do ...
  • 2023-01-18 一、Spring中組件掃描 1、預設使用的情況 <context:component-scan base-package="com.hh"></context:component-scan> 2、包含掃描 註:使用包含掃描之前,必須設置use-default-filters=" ...
  • EntityFrameworkCore是微軟官網提供的ORM框架,是輕量化、可擴展、開源和跨平臺的數據訪問技術框架,但是在.Net 開發圈的評論卻褒貶不一。很多人認為EFCore 執行的效能比較差,很多複雜的查詢場景很難實現,也有很多人認為,EFCore 開發簡單,在中小型項目中,能夠快速的實現業務 ...
一周排行
    -Advertisement-
    Play Games
  • 一:背景 1. 講故事 年前遇到了好幾例托管堆被損壞的案例,有些運氣好一些,從被破壞的托管堆記憶體現場能觀測出大概是什麼問題,但更多的情況下是無法做出準確判斷的,原因就在於生成的dump是第二現場,借用之前文章的一張圖,大家可以理解一下。 為了幫助更多受此問題困擾的朋友,這篇來整理一下如何 快狠準 的 ...
  • 前言 .NET6 開始,.NET Croe API 項目取消了 Startup.cs 文件,在 Program.cs 文件的 Main 函數中完成服務的註冊和中間件管道的管理。但當我們項目引入更多包的時候,Program.cs 文件也會看起來很臃腫。 而且,我們不只會有一個後端項目,為了方便快速創建 ...
  • 目錄 背景 get 與 post 的區別 所有介面都用 post 請求? 背景 最近在逛知乎的時候發現一個有趣的問題:公司規定所有介面都用 post 請求,這是為什麼? 看到這個問題的時候其實我也挺有感觸的,因為我也曾經這樣問過我自己。在上上一家公司的時候接到一個項目是從零開始搭建一個微服務,當時就 ...
  • *以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/2GFLTstDC7w6u3fTJxflNA 本文大概 1685 個字,閱讀需花 6 分鐘內容不多, 但也花了一些精力如要交流, 歡迎關註我然後評論區留言 謝謝你的 ...
  • 在新版本的pandas中,上述代碼會引起警告,建議改成SQLAlchemy connectable(engine/connection),後續代碼將引入這種升級的連接方式。 ...
  • 幾乎所有的高級編程語言都有自己的垃圾回收機制,開發者不需要關註記憶體的申請與釋放,Python 也不例外。Python 官方團隊的文章 https://devguide.python.org/internals/garbage-collector 詳細介紹了 Python 中的垃圾回收演算法,本文是這篇 ...
  • 如果您想查找高於或低於平均值的數字,可以不必計算該平均值,就能查看更高或更低的值。通過Java應用程式,可以自動突出顯示這些數字。除了快速突出顯示高於或低於平均值的值外,您還可以查看高於或低於的值的個數。現在讓我們看看如何在 Java應用程式中實現此操作。 引入jar包 導入方法1: 手動引入。將  ...
  • 第一種方式:使用{} firstDict = {"name": "wang yuan wai ", "age" : 25} 說明:{}為創建一個空的字典對象 第二種方式:使用fromkeys()方法 second_dict = dict.fromkeys(("name", "age")) #valu ...
  • 在golang中可以使用a := b這種方式將b賦值給a,只有當b能進行深拷貝時a與b才不會互相影響,否則就需要進行更為複雜的深拷貝。 下麵就是Go賦值操作的一個說明: Go語言中所有賦值操作都是值傳遞,如果結構中不含指針,則直接賦值就是深度拷貝;如果結構中含有指針(包括自定義指針,以及切片,map ...
  • 本文結合京東監控埋點場景,對解決樣板代碼的技術選型方案進行分析,給出最終解決方案後,結合理論和實踐進一步展開。通過關註文中的技術分析過程和技術場景,讀者可收穫一種樣板代碼思想過程和解決思路,並對Java編譯器底層有初步瞭解。 ...