同样都能用来分离方法【声明】和【实现】
何时用委托,何时用接口,这是个暂时还没搞明白的问题。
可能有一些情况用委托方便,而用接口则比较麻烦。
比如,在同一个类中,需要实现方法的多个版本。
这时候,用委托可以方便的实现多个接口相同的方法,送给委托调用;而接口就有点不方便了。
下面做了一个简单的演示用窗口程序。
using System;
using System.Collections.Generic;
using System.Text;
namespace myFormApp.lib
{
class Class1
{
//委托声明
public delegate void outputMsg(string message);
public void dealWithError(String strMsg,outputMsg inDel)
{
/*
*TODO 错误处理逻辑是演示用的控制台打印
*/
System.Console.WriteLine("dealwith error!");
//用传递进来的错误信息打印方法答应信息。
//但是此处不意识具体的信息输出方式。
inDel(strMsg);
}
}
}
做一个窗口程序,点击按钮时调用上面的错误处理程序Class1
using System;
using System.Text;
using System.Windows.Forms;
using myFormApp.lib;
using System.IO;
namespace myFormApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//按钮点击触发
private void button1_Click(object sender, EventArgs e)
{
Class1 testObj = new Class1();
//调用错误处理方法,同时传入putMsgToConsole方法的地址,将信息出到控制台
testObj.dealWithError("errorMsg to console!", putMsgToConsole);
//调用错误处理方法,同时传入putMsgToFile方法的地址,将信信息出到文件
testObj.dealWithError("errorMsg to File!", putMsgToFile);
}
//委托的实现方法1,将信息出于控制台
private void putMsgToConsole(String msg)
{
System.Console.WriteLine(msg);
}
//委托的实现方法2,将信息出于文件
private void putMsgToFile(String msg)
{
string path = @"D:\TestMsg.log";
if (!File.Exists(path))
{
using (FileStream fs = File.Create(path)) { }
}
using (FileStream fs = File.OpenWrite(path))
{
Byte[] info =
new UTF8Encoding(true).GetBytes(msg);
fs.Write(info, 0, info.Length);
}
}
}
}
分享到:
相关推荐
本文将深入探讨C#委托的使用,特别关注传统委托和多播委托的实例。 首先,让我们理解什么是委托。委托在C#中相当于一个对象,可以引用一个或多个具有相同签名的方法。它们是类型安全的,因为每个委托类型都与特定的...
这个DEMO可能包含了如何在Visual Studio 2010环境下创建一个简单的应用程序,该程序演示了如何使用委托从父窗口(通常是主窗口)向子窗口(弹出或模态对话框)传递数据。 首先,让我们深入了解委托的概念。在C#中,...
在C#编程语言中,委托是一种类型,它代表方法的引用。它们允许我们将方法作为参数传递给其他方法,或者将方法存储在变量中以便稍后调用。这为实现事件处理、回调函数以及函数式编程风格提供了基础。下面将详细探讨在...
在这个例子中,`Delegates-and-Events-in-CSharp`可能包含一个演示如何在实际代码中使用委托和事件的项目。这个项目可能包含了`Publisher`和`Subscriber`类,它们展示了如何创建、订阅、触发和处理事件。通过实践这...
在C#编程语言中,委托和事件是两个关键特性,它们是实现面向对象设计模式,尤其是事件驱动编程的基础。本文将深入探讨这两个概念,并通过一个Demo代码实例来演示其用法。 首先,让我们理解什么是委托。在C#中,委托...
在C#编程中,多线程和委托是两个非常重要的概念,它们对于开发高效、响应式的应用程序至关重要。本文将深入探讨这两个主题,并结合一个简单的Windows Forms应用实例来演示如何使用它们来更新用户界面(UI)。 一、...
**C#面向对象程序设计委托PPT与实例** 在C#编程语言中,委托是一种强大的特性,它允许我们将方法作为参数传递,或者将多个方法捆绑在一起执行,这使得代码更加灵活和可扩展。本资料主要关注C#中的委托概念及其在...
在C#编程语言中,委托是面向对象设计的一个重要特性,它扮演着...在实际项目中,如`zbDelegate.sln`和`zbDelegate`这样的文件可能包含了示例代码,用于演示和练习委托的使用。通过实践,你可以更好地掌握这一核心概念。
本文将深入探讨如何利用委托来实现在C#窗体间的通信,并通过一个实例来演示其工作原理。 首先,理解委托的基本概念。委托在C#中类似于函数指针,它可以指向一个或多个具有相同签名的方法。它们使我们能够创建事件...
在这个例子中,我们将深入探讨C#委托的工作原理及其应用。 首先,让我们理解什么是委托。在C#中,委托是类的类型,它封装了指向一个或多个具有相同签名的方法的引用。委托可以被看作是事件处理程序的基石,因为它们...
### C#中的代理、委托、事件与反射 #### 一、泛型委托 在C#中,泛型委托是一种非常有用的特性,它允许我们创建能够处理多种数据类型的委托。通过泛型委托,开发者可以在不重复代码的情况下实现对不同类型的处理。 ...
接下来,让我们通过一个实际的例子来演示如何声明、实例化和使用委托。假设我们有一个简单的计算任务,需要执行加法或乘法操作,我们可以创建两个方法: ```csharp int Add(int a, int b) => a + b; int Multiply...
这段代码展示了如何在类中定义属性、委托和事件,并通过一个具体的示例来演示它们之间的交互。 ### 属性(Properties) 在代码中,`ѧ` 类定义了两个属性:`NAME` 和 `SCORE`。`NAME` 是一个只读属性,表示学生的...
在C#编程语言中,委托(Delegate)是一个强大的特性,它允许我们把方法作为参数传递,或者简单地说,就是“函数指针...通过分析这个代码,开发者可以加深对C#委托的理解,并在实际项目中更加灵活地使用这个强大的工具。
`CS_threadTest`很可能包含了一个演示如何使用委托和线程处理数据的示例。在这个项目中,你可能会看到以下内容: 1. 一个委托类型,用于封装数据处理方法。 2. 使用`Thread`或`ThreadPool`启动新线程,处理数据。 3...
下面我们将深入探讨C#委托的原理,通过实例代码来理解其工作方式。 首先,我们需要了解什么是委托类型。C#中的委托类型是通过`delegate`关键字定义的,它类似于函数指针,但更安全,因为它们是类型安全的。声明一个...
【C#入门演示文稿PPT】是一份专为初学者设计的教程资源,旨在帮助新接触编程语言C#的人快速掌握基础知识。C#(读作"C Sharp")是由微软公司开发的一种面向对象的编程语言,它在.NET框架下运行,广泛应用于Windows...
本文将深入探讨C#中的委托和事件,并通过一个简单的示例进行演示。 ### 1. 委托(Delegates) **概念**:委托在C#中相当于一种类型安全的函数指针,它可以引用一个或多个方法。委托可以作为参数传递给方法,也可以...
### C#中的委托和事件详解 #### 2.1 理解委托 **2.1.1 将方法作为方法的参数** 首先,我们通过一个简单示例来理解将方法作为方法参数的概念。考虑一个场景,我们有一个`GreetPeople`方法用于向某人打招呼。该方法...