首页 > 编程语言 >04.C#扩展方法

04.C#扩展方法

时间:2023-09-30 21:33:26浏览次数:28  
标签:return 04 myMath C# 扩展 MyMath Div 方法 public

1、为什么要有扩展方法?

  先思考这样一个问题,如果已有类中需要添加一个新的方法,应该如何实现呢?可能会有如下几种方法:

  (1)、有源代码情况下,直接增添一个方法 实现;

  (2)、无源代码情况下,继承该类(可继承的情况下),由子类方法实现;

             (不可继承)则通过组合的方式实现。

    但是 方法2存在一个问题,就是在使用这个方法的时候,需要一个新的类的实列来调用方法实现。那么在这种情况下如何通过原来类的实列对象进行扩展的方法调用呢?——就出现了扩展方法。

2、如何使用过扩展方法?

  (1)定义个静态类;

  (2)定义一个公共的静态方法;

  (3)扩展方法的第一个参数必须是: this TypeName 

3、举个例子看看

namespace ConsoleApp2 点击查看代码
{
    internal class Program
    {
        static void Main(string[] args)
        {
              //源代码中增加方法实现
            {
                MyMath myMath = new MyMath() { X=10,Y=20};
                // myMath.Div();
            }
            //继承方式实现
            {
                MyMathDerived myMath = new MyMathDerived() { X = 10, Y = 20 };
                myMath.Div();

            }
            //组合的方式实现
            {
                MyMathDiv myMath =new MyMathDiv() ;
                myMath.MyMath.Y = 10;
                myMath.MyMath.X = 10;
                myMath.Div();

            }
            //扩展方法实现
            {
                MyMath myMath = new MyMath() { X = 10, Y = 20 };
                myMath.Div();
            }
        }
    }
    class MyMath
    {
        private int x;

        public int X
        {
            get { return x; }
            set { x = value; }
        }

        private int y;

        public int Y
        {
            get { return y; }
            set { y = value; }
        }

        public double Add()
        {
            return X + Y;
        }
        public double Mulit()
        {
            return X * Y;
        }
        public double Sub()
        {
            return X - Y;
        }
        //源代码中增加方法实现
        //public double Div()
        //{
        //    return X / Y;
        //}

    }
    //继承方式实现
    class MyMathDerived : MyMath
    {
        public double Div()
        {
            return X / Y;
        }
    }
    //组合的方式实现
    class MyMathDiv
    {
        public MyMathDiv()
        {
            this.MyMath = new MyMath();
        }
        private MyMath myMath;

        public MyMath MyMath
        {
            get { return myMath; }
            set { myMath = value; }
        }

        public double Div()
        {
            return MyMath.X / MyMath.Y;
        }
    }
    //扩展方法实现
    static class MyMathExtent
    {
        public static double Div(this MyMath myMath)
        {
            return myMath.X / myMath.Y;
        }

    }
}

4、扩展方法的实质是什么?

标签:return,04,myMath,C#,扩展,MyMath,Div,方法,public
From: https://www.cnblogs.com/cxfeng92/p/17738144.html

相关文章

  • 无涯教程-JavaScript - T函数
    描述T函数返回值所引用的文本。语法T(value)争论Argument描述Required/OptionalValueThevalueyouwanttotest.RequiredNotes如果value是或引用文本,则T返回值。如果值不引用文本,则T返回""(空文本)。通常不需要在公式中使用T函数,因为MicrosoftExcel会根......
  • 监控汇聚/视频监控平台EasyCVR土地建设履约全周期监管方案
    目前,各级政府正积极推进土地节约集约利用工作,努力提升工业用地的质量和效益。然而,随着工作的推进,我们也面临一些新情况和问题。例如,工业用地批后监管机制尚不完善,导致项目履约监管困难和低效用地改造等问题。为了解决这些难题,我们提出了一种基于人工智能和视频技术的可视化智能土......
  • 2022 China Collegiate Programming Contest (CCPC) Guangzhou Onsite
    Preface好难啊这场广州站,不愧是5题金4题铜的超恶劣站,中档题普遍难度较高但我感觉主要原因还是题目出的太偏向于DP了,AI是本质差不多的树上换根DP,M又是个数位DP,导致像我这种不擅长DP的人直接中期坐牢但好在祁神大力切出了medium~hard的K题,然后最后一小时我把一直在想的A题丢给徐......
  • 视频融合/安防视频监控平台EasyCVR智能视频分析引擎技术在轨道交通行业的应用
    随着城镇化的加速发展,轨道交通作为城市基础设施的重要组成部分,已成为各大城市建设的重中之重。然而,由于人流量大、人员复杂、空间相对封闭等因素,轨道交通也成了公共安全保障的一项重要工作。如何确保乘客的安全出行成为轨道交通运营和安全管理的首要任务。与此同时,随着人工智能技......
  • 分析视频监控/视频汇聚平台EasyCVR分析网关车辆检测/车牌识别算法及应用场景
    在数字化时代,由于大众对出行要求的提升,汽车数量不断增加,给城市和交通管理带来了很多挑战。为了应对这些问题,旭帆科技开发了一套AI智能车辆检测与车牌识别算法,为交通管理和车辆安全提供高效的解决方案。AI车辆检测和车牌识别算法集成了多种技术,如光学字符识别(OCR)和云计算等,能够从......
  • 视频汇聚\监控汇聚平台EasyCVR+视频监控技术搭建离岗睡岗检测系统
    许多安全事故的原因可以追溯到相应工作人员的失职。为了维持日常生产、运营和治安工作,一些关键岗位会安排特定的值班人员。但是,这些岗位的工作人员经常面临极度单调重复的工作,容易感到疲劳并分心,经常违规离岗、睡觉、抽烟、使用手机等,导致难以及时发现安全隐患并处理突发事件,从而......
  • linux 中 将ASCII码 转换是十进制数值
     001、[root@pc1test]#echo-n!|od-An-tu1##将ASCII码感叹号转换为十进制数值33 002、[root@pc1test]#echo-n!|od-An##将ASCII感叹号转换为8进制数值000041 003、[root@pc1test]#echo-n!|od-An000041[root@pc1t......
  • 安防视频监控\视频融合平台EasyCVR在党政工作中可扮演重要角色
    近年来,随着数字化战略的不断推进和发展,各个行业都积极进行数字化转型,并在AI+视频融合应用方面取得了显著进展。政府机构也不例外,他们需要提高数字化水平来推动数字政府的建设。为了实现各项视频业务的互联互通,各级政务机构需要建设统一的音视频交互融合中台,以满足数字政务集约融合......
  • chrome浏览器网页截图时图片“泛白”“过曝”的解决办法
    原因分析表象原因为系统显示设置里开启了HDR,所以理论上只要关闭HDR就可以解决,但是这种牺牲体验换来的解决办法总会让人纠结。HDR设置直接原因是chrome会默认匹配系统的颜色管理,但是由于截图瞬间颜色管理出错,所以出现了颜色显示不对。解决办法在chrome地址栏输入chr......
  • 5G飞速发展的时代背景下视频汇聚平台EasyCVR如何做到更好的视频融合功能
    在5G时代,5G网络的低延迟、高速率和广覆盖性加快了各行业的智能化进程,并推动了“万物互联”生态系统的建设。视频信息成为各领域智能化发展的重要载体和管理途径。面对复杂而互联的多领域市场,视频业务呈现出行业化、场景化和融合化的多样性特征。那么,如何解决不同视频业务应用中视......