精华内容
下载资源
问答
  • c#中webservice函数如何实现重载 在webservice中增加以下代码,一定要加在类的外面。 [WebServiceBinding(ConformsTo = WsiProfiles.None)] 然后函数是按如下方式写:增加MessageName项  [WebMethod] ...

    c#中webservice函数如何实现重载

    在webservice中增加以下代码,一定要加在类的外面。
    [WebServiceBinding(ConformsTo = WsiProfiles.None)]

    然后函数是按如下方式写:增加MessageName项
     [WebMethod]
        public bool User_Login(string sUserId,string sHardId,string sSJ,out string ErrorMsg)
        {
             return true;
     }

      [WebMethod(MessageName = "method2")]
        public bool User_Login(string sUserId, string sHardId, string sSJ, string sPOS_Version,out string ErrorMsg)
        {
         return true;
     }

      [WebMethod(MessageName = "method3")]
        public bool User_Login(string sUserId, string sHardId, string sSJ, string sPOS_Version,string p3,out string ErrorMsg)
        {
           return true;
        }

    展开全文
  • js如何实现重载

    2017-12-07 10:39:00
    但是我们知道js中是没有重载的,因为后定义的函数会覆盖前面的同名函数,但是我们又想实现函数重载该怎么办呢? 第一种方法:  这种方法比较简单,给一个思路,大家肯定都能理解,就是函数内部用switch语句,根据...

    所谓重载,就是一组相同的函数名,有不同个数的参数,在使用时调用一个函数名,传入不同参数,根据你的参数个数,来决定使用不同的函数!但是我们知道js中是没有重载的,因为后定义的函数会覆盖前面的同名函数,但是我们又想实现函数重载该怎么办呢?

    第一种方法:

      这种方法比较简单,给一个思路,大家肯定都能理解,就是函数内部用switch语句,根据传入参数的个数调用不同的case语句,从而功能上达到重载的效果。

      这种方法简单粗暴。但是对于一个正在学习js的人来说,这种方法未免太敷衍了。

      下面重点介绍一下第二种,老实说我看的时候很吃力看了一个小时才捋清楚,因为有的知识点虽然看过了但是不熟悉。这次就给我上了一课,教会了我很多东西。

    第二种方法:

      我们这个例子,是如果你不传入参数,就会输出所有的人,输入firstname,就会输出匹配的人,如果输入全名的人,也会输出匹配的人。如果用重载的话,用户体验确实会很好(这个例子是我学习时从网上扒下来的,很有代表性,但是他们都没有写实现过程,我来和大家谈论一下实在的东西)

         function method(obj,name,fnc){
                var old = obj[name];
                console.log(old instanceof Function);
                obj[name] = function(){
                    console.log(arguments.length+" "+fnc.length);
                    if(arguments.length === fnc.length){
                        return fnc.apply(this,arguments);
                    }else if(typeof old === "function"){
                        return old.apply(this,arguments);
                    }
                }
            }
            var people = {
                values:["Zhang san","Li si"]
            };
            method(people,"find",function(){
                console.log("无参数");
                return this.values;
            })
            method(people,"find",function(firstname){
                console.log("一个参数");
                var ret = [];
                for(var i = 0;i < this.values.length;i++){
                    if(this.values[i].indexOf(firstname) === 0){
                        ret.push(this.values[i])
                    }
                }
                return ret;
            })
            method(people,"find",function(firstname,lastname){
                console.log("两个参数");
                var ret = [];
                for(var i = 0;i < this.values.length;i++){
                    if(this.values[i] == firstname + " " + lastname){
                        ret.push(this.values[i])
                    }
                }
                return ret;
            })
            console.log(people.find());
            console.log(people.find("Zhang"));

     

    思路:这段代码第一眼看到我是懵逼的,再看有点思路,再看又懵了。这种方法巧妙的运用了闭包原理,既然js后面的函数会覆盖前面的同名函数,我就强行让所有的函数都留在内存里,等我需要的时候再去找它。有了这个想法,是不是就想到了闭包,函数外访问函数内的变量,从而使函数留在内存中不被删除。就是闭包。

    实现过程:我们看一下上面这段代码,最重要的是method方法的定义:这个方法中最重要的一点就是这个old,这个old真的很巧妙。它的作用相当于一个指针,指向上一次被调用的method函数,这样说可能有点不太懂,我们根据代码来说,js的解析顺序从上到下为。

      1.解析method(先不管里面的东西)

      2.method(people,"find",function()  执行这句的时候,它就回去执行上面定义的方法,然后此时old的值为空,因为你还没有定义过这个函数,所以它此时是undefined,然后继续执行,这是我们才定义 obj[name] = function(),然后js解析的时候发现返回了fnc函数,更重要的是fnc函数里面还调用了method里面的变量,这不就是闭包了,因为fnc函数的实现是在调用时候才会去实现,所以js就想,这我执行完也不能删除啊,要不外面那个用啥,就留着吧先(此处用call函数改变了fnc函数内部的this指向)

      3.好了第一次method的使用结束了,开始了第二句,method(people,"find",function(firstname) 然后这次使用的时候,又要执行old = obj[name]此时的old是什么,是函数了,因为上一条语句定义过了,而且没有删除,那我这次的old实际上指向的是上次定义的方法,它起的作用好像一个指针,指向了上一次定义的 obj[name]。然后继续往下解析,又是闭包,还得留着。

      4.第三此的method调用开始了,同理old指向的是上次定义的 obj[name] 同样也还是闭包,还得留着。

      5.到这里,内存中实际上有三个 obj[name],因为三次method的内存都没有删除,这是不是实现了三个函数共存,同时还可以用old将它们联系起来是不是很巧妙

      6.我们 people.find() 的时候,就会最先调用最后一次调用method时定义的function,如果参数个数相同 也就是  arguments.length === fnc.length 那么就执行就好了,也不用找别的函数了,如果不相同的话,那就得用到old了  return old.apply(this,arguments); old指向的是上次method调用时定义的函数,所以我们就去上一次的找,如果找到了,继续执行 arguments.length === fnc.length  如果找不到,再次调用old 继续向上找,只要你定义过,肯定能找到的,对吧!

      总结:运用闭包的原理使三个函数共存于内存中,old相当于一个指针,指向上一次定义的function,每次调用的时候,决定是否需要寻找。

    执行过程很容易说明这一点:首先第一次调用的时候 old肯定不是函数,所以instance判断是false,继续调用的话就会为true。然后,我们调用method的顺序,是从没有参数到两个参数,所以我们最先调用find方法,是最后一次method调用时定义的,所以fnc的length长度是2.然后向上找,length为1,最后终于找到了length为0的然后执行,输出。

     

     

     原创学习博客,欢迎讨论,指出不足之处。

     

    转载于:https://www.cnblogs.com/pianruijie/p/7997914.html

    展开全文
  • 仅返回类型不同的函数,在C++中如何实现重载

    笔者看到的原文地址:仅返回类型不同的函数,在C++中如何实现重载?,不知是否真原文地址。原作者看到请联系笔者以更换链接地址。

    文末作者抛出了一个问题:

    对于仅返回类型不同的类的重载成员函数,什么时候会调用const版本?

     

    笔者这里做出解答:

    只读对象会调用const版本的重载函数。

     

    理论依据如下:

    只读对象const
    1 对只读对象只能调用只读函数,不能调用非只读函数.对于非只读对象,即可以调用非只读函数,也可以调用只读函数.
    2 如果一个类的成员函数不会修改成员变量的值,那么,就把他(成员函数)声明成只读函数.
    3 只读和非只读函数可以形成重载关系.此时,对于只读对象,只能调用只读函数,而非只读对象会优先选择非只读函数.
    4 特殊情况:只读函数可以修改声明为mutable的成员变量.
     

    #include <iostream>
    
    using namespace std;
    
    typedef struct TData {
        int a;
        int b;
    } TData;
    
    class CTest {
    public:
        TData & getData()
        {
            std::cout << "[TData & getData()]" << std::endl;
            return data;
        }
        const TData &getData() const
        {
            std::cout << "[const TData &getData() const]" << std::endl;
            return data;
        }
    private:
        TData data;
    };
    
    
    int main()
    {
        CTest test;
        TData *pData = &test.getData();
    
        const TData *const pcData = &test.getData();
    
        /*-----------我是分割线----------------*/
    
        const CTest &ctest = test;
    
        //TData *pData2 = &ctest.getData(); //编译错误
        const TData *const pcData2 = &ctest.getData();
    
        return 0;
    }

     

    展开全文
  • 剖析C++如何实现重载

    2017-08-06 16:16:40
    剖析C++实现函数重载的原理。

    函数重载:在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不
    同),返回值可同可不同。


    我们可知在c语言中要使用Add  () 函数实现int和double类型两数相加时会出现如下重定义错误,我们解决这个问题时可能会采用重命名函数名(如:Add_int ()  Add_double()  )。但Add()函数本身就是为了实现相加的功能,因而在c++中为了使用更简洁的办法,引入了一个概念——函数重载。(右图便可编译通过。)



    那么我们不免疑惑c++到底是如何实现函数重载来解决这个问题的呢?

    在vs2013的项目属性中打开链接器->调试->生成map文件,然后在debug中打开我们发现两个Add()分别被重命名。


    我们做一测试加入如下代码


    观察map文件发现如图结果:

    分析后我们便可以得出结论,c++中通过对函数名重新命名来实现函数重载,其中H测代表int类型,N代表double泪车型,其中命名规则中第一个字母代表返回值类型,余下则为参数类型。

    函数重载的好处:用来命名一组功能相似的函数,减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。

    展开全文
  • JS如何实现重载和多态

    千次阅读 2018-06-01 20:20:21
    一、根据arguments个数实现重载 js本身不支持重载,所以只能通过其他方式实现, arguments 检测传参的个数,然后再执行不同的方式 function add() { var sum = 0 ; for ( var i = 0 ; i ; i ++ ) { sum += ...
  • 一.前言 Keepalived运行过程中,可能存在更改配置的需求,例如修改virtual_ipaddress,virtual_...在keepalived不重启,且修改的配置参数得到立即生效的同时我们也希望Keepalived的配置重载不会导致主备切换。 ...
  • 大家都知道,所谓重载,就是一组相同的函数名,有不同个数的参数,在使用时调用一个函数名,传入不同参数,根据你的参数个数,来决定使用不同的函数!重载这个在JAVA这些经典的编程语言里面都很好用,可以说调用同一...
  • DLL代码: int WINAPI Add(int x, int y) {return x+y;} int WINAPI Add(float x, float y) {return x+y;} Def文件: ...请教:如何在DLL的输出中,实现重载函数Add()的输出?请高手指点,谢谢!
  • 是不是需要解析输入的字符串啊?
  • 大家应该都知道C++和Java编程能够实现函数的重载,而当我们使用Matlab的一些函数,如:plot函数...下面我就通过一个简单的输出输入数中的最大数的函数fun()来说明Matlab在编辑函数时如何实现重载。方法/步骤:1.首先...
  • 如何实现方法重载,涉及到三个问题:同名函数的调用、函数中特殊的参数arguments、如何利用arguments实现方法重载,需要的朋友可以参考下
  • 对于.NET重载(Overloading)——定义不同参数列表的同名方法(顺便提一下,我们但可以在参数列表上重载方法,我们甚至可以在返回类型层面来重载我们需要的方法——也就是说,我们可以定义两个具有相同参数列表但...
  • 大家都知道js是没有重载的,但是通过某种方式是可以实现的,下面就是jq的实现方式: /*给某个对象添加方法的函数*/ function addMethod(object, name, fn) { var old = object[name]; //第一次old是 undefined ...
  • 如何实现JS函数重载

    2019-03-31 22:49:29
    1. JavaScripth函数不能够实现重载 什么是重载 重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 参考javascript ...
  • js面向对象编程:如何实现方法重载

    千次阅读 2014-07-01 13:43:29
    js中如何实现方法重载?这涉及到三个问题 1同名函数的调用问题 2函数中特殊的参数arguments 3如何利用arguments实现方法重载
  • 在java里面实现方法的重载,主要由一下几种。...我们还是通过代码来看看java是如何实现方法的重载的. 还是来看看下面的代码吧。 package oop2; public class overloadding { public static void ...
  • C语言实现函数重载

    万次阅读 多人点赞 2016-03-18 11:30:26
    C++如何实现重载C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在原函数名前后加上特定的字符串(g++编译器中通过在函数名...
  • Python 通过单分派泛函数部分支持了方法重载。 官方文档是这样定义泛函数以及单分派函数的: A generic function is composed of multiple functions implementing the same operation for different types. Which...
  • javascript不能支持函数的重载,如下: 代码如下:[removed] function f(length) { alert(“高为:”+length); } function f(length,width) { alert(“高为:”+length+”,宽为:”+width); } ...
  • Python 函数如何实现重载

    千次阅读 2019-03-13 16:35:36
    文章地址:Python 函数实现重载 单分派泛函数 假如你想在交互模式下打印出美观的对象,那么标准库中的 pprint.pprint() 函数或许是一个不错的选择。但是,如果你想 DIY 一个自己看着舒服的打印模式,那么你很可能会...
  • 简单的说,就是如何实现 string Test() {...} int Test() {...} 然后通过接受方的上下文自动选取重载: int i = Test(); string s = Test(); 当然VB或者C#都是不允许这样写的。不过IL并没有...
  • 如何实现js的重载

    2019-09-24 18:32:01
     个人觉得,这样虽然可以实现重载,但也不是很好用,我们可以根据具体情况在一个函数中实现重载,如果要重载的两个函数相差较大,那就保留两个函数,而如果两个函数的实现基本差不多,那么可以在一个函数中进行判断...
  • 重载如何实现的?

    2019-09-24 06:59:54
    重载如何实现的? 几个同名的重载函数仍然是不同的函数,它们是如何区分的呢?我们自然想到函数 接口的两个要素:参数与返回值。 如果同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的函 ...
  • PHP如何实现函数重载

    2013-03-26 17:32:00
    故而PHP中是可以实现函数重载的,那么它是如何实现的呢?寻思了一会儿,既然PHP弱类型,无法根据函数参数的类型来识别函数,但是我们可以统计函数参数的个数啊!于是依据此思路,有了以下代码:   ClassTest....
  • 如何实现 C 的函数重载

    千次阅读 2013-10-19 15:29:21
    大家都知道 C++ 等面向对象的语言支持函数重载,C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在原函数名前后加上特定的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,210
精华内容 884
关键字:

如何实现重载