c# delegate 封装 方法的复用 方法里面调用方法

 class Program
    {
        public delegate int Run(int i, int j);
        public static void Main(string[] args)
        {
            MainFunction(Add);
            MainFunction(Delete);
            MainFunction(Ride);
            MainFunction(Divide);
        }

        public static void MainFunction(Run r)
        {
            // do someThing
            r(10, 10);
            // do someThing
        }

        public static int Add(int i, int j)
        {
            return i + j;
        }
        public static int Delete(int i, int j)
        {
            return i - j;
        }

        public static int Ride(int i, int j)
        {
            return i * j;
        }
        public static int Divide(int i, int j)
        {
            return i * j;
        }

    }

简单的代码 例子。

复杂的写法

  class Program
    {
        public delegate void Run(int i, int j);
        public static void Main(string[] args)
        {
            MainFunction(Add);
            MainFunction(Delete);
            MainFunction(Ride);
            MainFunction(Divide);
        }

        public static void MainFunction(Run r)
        {

            r(10, 10);
            // do someThing
        }

        public static void Add(int i, int j)
        {
            // do someThing
             var r= i + j;
            // do someThing
        }
        public static void Delete(int i, int j)
        {
            // do someThing
            var r = i - j;
            // do someThing
        }

        public static void Ride(int i, int j)
        {
            // do someThing
            var r = i * j;
            // do someThing
        }
        public static void Divide(int i, int j)
        {
            // do someThing
            var r = i * j;
            // do someThing
        }

    }

看到了吧,do something  要复制 这么多次。。。 这就是封装。面向对象哦。

时间: 2024-10-18 21:08:00

c# delegate 封装 方法的复用 方法里面调用方法的相关文章

C#反射、方法调用、自动调用方法、根据按钮名称调用方法、C#按钮权限管理

根据按钮名称,直接调用方法,适用于用户对按钮的操作权限管理. /// <summary> /// 菜单按钮点击事件 /// </summary> void usrMenu1_UserControlMenuItemClick(object sender, EventArgs e) { #region MyRegion ////BtnGetParam 获取参数 //if (Nbi.Name == "BtnGetParam") //{ // BtnGetParam_C

利用特性区分查找方法,并通过反射调用方法

如示例代码,buf带描述标记 /// <summary> /// 分析 数据 /// </summary> /// <param name="buf"></param> public void AnalysisDatabuf(string buf) { if (string.IsNullOrEmpty(buf)) return; try { string optNo = buf.Substring(0, 5); string descri

[Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法

前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数arguments对象.它是一个类数组对象,并不是一个标准的数组,所以无法使用数组原型中的方法,因此无法使用arguments.forEach这样的形式来遍历每一个参数.这里我们必须使用call方法来对使用forEach方法. function highlight(){ [].forEach.call(argume

关于destoon后台添加自定义功能+前台展示标签调用方法

今天没事,继续更新关于destoon方面知识技巧,今天给大家介绍关于destoon后台添加字段,如何在前台调用?想必大多数人都需要,所以今天给大家说说. 后台系统存放位置,一共有三个: 第一个为根目录下:config.inc.php (核心配置文件) 第二个为数据表:destoon_setting(主要是其他模块配置) 第三个存放位置:/file/cache/module.php (这个主要是setting存储位置) destoon系统变量主要有以下几类: 系统封装变量: 这些变量是destoo

C#中调用方法的示例

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace W3C_APP_Demo { class Program { public int FindMax(int num1, int num2) { /* 局部变量声明 */ int result; if (num1 > num2) result = n

跟王老师学反射(六):使用反射调用方法

跟王老师学反射(六):使用反射调用方法 主讲教师:王少华   QQ群号:483773664 学习内容 使用反射调用方法 当获得某个类对应的Class对象后,就可以通过该Class对象的getMethods()方法或getMethod()方法来获取全部方法或指定方法,这二个方法的返回值是Method对象数组,或者Method对象. 一.public Objectinvoke(Object obj,  Object... args) 获得Method对象后,程序就可以通过该Method来调用对应的方

通过反射获取及调用方法(Method)

1.获取方法使用反射获取某一个类中的方法,步骤:①找到获取方法所在类的字节码对象②找到需要被获取的方法 Class类中常用方法: public Method[] getMethods():获取包括自身和继承过来的所有的public方法 public Method[] getDeclaredMethods():获取自身所有的方法(不包括继承的,和访问权限无关) public Method getMethod(String methodName,Class<?>...parameterTypes)

Action执行与Delegate的差异,调用方法

MSDN:可以使用 Action<T> 委托以参数形式传递方法,而不用显式声明自定义的委托. 封装的方法必须与此委托定义的方法签名相对应. 也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能返回值. (在 C# 中,该方法必须返回 void. 在 Visual Basic 中,必须通过 Sub…End Sub 结构来定义它. 它也可以是返回已忽略的值的方法.)通常,这种方法用于执行某个操作. Action是一个泛型的委托,其内部即使用delegate去实现,当普通的delegate

对delegate进行扩展 打造通用的&quot;计时完成&quot;方法 z

让用户尽量少打字 每次让用户输入这么多信息的确很糟糕, 可以改进一下设计: 服务器IP和用户名可以存放在配置文件里面, 初始化的时候默认加载到相应的文本框中; 从安全角度考虑, 密码必须经过用户手动输入; 而数据库名字则没必要让用户输入, 有了服务器IP.用户名.密码后可以尝试连接SQL Server, 连接SQL Server成功后, 把数据库中所有的数据库名加载到ComboBox让用户选择连接哪个数据库. 密码不正确 密码正确 如何实现 在后台代码中定义一个计时器, 设置它的Interval

委托IL解析-----封装逻辑和代码复用

委托IL解析-----封装逻辑和代码复用 1.委托的本质 委托大家都不陌生吧,我们经常都会接触到或用到.LINQ查询就是基于委托来实现的. 我们常常这样定义委托: public delegate void SayHiDelegate(string name); 那么委托的本质是什么呢? 在介绍委托的本质前,我们先来认识一下IL,IL是中间语言,是我们在VS写的代码和计算机二进制代码的中间语言.我们的代码编译生成IL,IL通过GIT最终编译成计算机能识别的计算机二进制代码.IL可以看到真正原生的C