首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个类如何实现两个接口中同名同参数不同返回值的函数

a); } 他们都要求实现方法GetA,而且传入的参数都是一样的String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class... X:IA,IB 由于接口中要求的方法的方法名和参数是一样的,所以不可能通过重载的方式来解决,那么我们该如何同时实现这两个接口拉?...        Console.WriteLine("IA.GetA");         return a+":zengyi";     }     int IB.GetA(string a)//实现...IB接口     {         Console.WriteLine("IB.GetA");         return 12;     } } 同样如果有更多的同名同参不同返回值的接口,也可以通过..."接口名.函数名"的形式实现.

3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    泛函编程(30)-泛函IO:Free Monad-Monad生产线

    在介绍Free Monad之前我们先从一个现实的例子来展开讨论: 假设我们要编写一个银行转账的函数,我们可能先把这个函数的款式(function signature)推导出来: 1 def transfer...(parameter injection)方式:在transfer函数输入参数中注入context object。...那么这个函数是无法实现函数组合(function composition)。transfer函数就不是一个泛函编程人员该使用的函数了。...不过要把Interact变成Monad就必须实现unit和flatMap两个函数,检查Interact trait,明显这是不可能的。 那我们把下面的努力都应该放在如何转变成Monad这方面了。...Free Monad的Interpreter实现了算法和运算的分离考虑。Interpreter程序运算是通过一个转换函数实现的。

    1.1K70

    泛函编程(16)-泛函状态-Functional State

    在上节我们提到过 type Rand[+A] = RNG => (A, RNG),Rand是一个随意数产生函数。由于Rand是个类型,一个函数类型,所以可以被当作参数或者返回值来使用。...State类型的状态变迁机制就是通过状态行为函数来确定的。...注意状态行为函数run是State类的内部成员,我们有针对性的把一个State的状态变迁机制通过在构建State类时作为参数注入。然后产生的State实例就会按照我们期待的那样进行状态变迁了。...下面举个切实例子来示范泛函状态: 1 //Stack类型就是一个List[Int],后面比较容易表达点 2 type Stack = List[Int] 3 //pop就是一个State实例。...(s,s) } 4 def setState[S](s: S): State[S,Unit] = State[S,Unit] { _ => ((),s)} 5 6 } 还是通过状态行为函数来实现的

    913100

    深入理解JavaScript函数式编程

    当函数有多个参数的时候,对函数进行改造调用一个函数只传递并返回一个新的函数(这部分参数以后永远不会发生变化),这个新的函数去接收剩余的参数,返回结果。...这些问题引入了函子的概念 Fuctor函子 容器:包含值和值的变形关系(这个变形关系就是函数) 函子:是一个特殊的容器,通过一个普通的对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理...,而是由函子完成 函子就是一个实现了map的契约对象 可以把函子想象成一个盒子,这个盒子里面封装了一个值 想要处理盒子中的值,需要盒子的map方法传递一个处理值的函数(纯函数),由这个函数来对值进行处理...最终map方法返回一个包含新值的盒子(函子) 存在的问题,在输入null的时候存在异常,无法处理异常情况,那么如何解决这种的副作用呢?...柯里化函数可以把多个参数的函数转换成只有一个参数的函数,通过组合产生功能更强大的函数 柯里化让函数变的更灵活,让函数的粒度更小 函数可以看做一个处理数据的管道,管道中输入参数 x,在管道中对数据处理后得到结果

    4.3K30

    编程语言:类型系统的本质

    接口: 实现多态,面向接口编程。定义一个接口 I , 然后使用不同的结构体对接口 I 进行实现,然后利用接口对象作为形式参数,将不同类型的对象传入并调用相关的函数,实现多态。...类型构造函数 在类型系统中,我们可以认为类型构造函数是返回类型的一个函数。我们不需要自己实现类型构造函数,因为这是类型系统在内部看待类型的方式。 每个类型都有一个构造函数。一些构造函数很简单。...泛型类型,如T[],需要一个实际的类型参数来生成一个具体类型。其类型构造函数为(T) -> [T[] type]。...接下来看如何添加单例行为。我们提供一个新函数singletonDecorator(),它接受一个WidgetFactory类型的函数,并返回另外一个WidgetFactory类型的函数。代码如下。...函数的函子 除了函子外,需要知道的是,还有函数的函子。给定一个有任意数量的实参且返回类型T的值的一个函数。 函子在数学与函数式编程中 在数学中,特别是范畴论,函子是范畴之间的映射(范畴间的同态)。

    2.6K31

    Monad

    函数identity是一个自函数的特例,它接收什么参数就返回什么参数,所以入参和返回值不仅类型一致,而且值也相同。...接下来看看函子是如何映射两个范畴的,见下图: ? 范畴 图中范畴C1和范畴C2之间有映射关系,C1中Int映射到C2中的List[Int],C1中String映射到C2中的List[String]。...澄清了函子的含义,那么如何在程序中表达它? 在Haskell中,函子是在其上可以map over的东西。稍微有一点函数式编程经验,一定会想到数组(Array)或者列表(List),确实如此。...假设我们有个cube函数,它的功能就是计算每个数的3次方,函数签名如下: cube :: Number -> Number 现在我们想在其返回值上添加一些调试信息,所以返回一个元组(Tuple),第二个元素代表调试信息...在验证满足结合律之前,我们引入一个bind函数来辅助将f提升成fn. f :: Number -> (Number,String) => fn :: (Number,String) -> (Number

    1.3K50

    一些范畴论上的概念

    态射 自函数 EndoFunction 自函数就是把类型映射到自身类型 identity :: Number -> Number identity函数就是一个自函数的例子,它接收什么就返回什么 函子...也就是说,一个范畴内部的所有元素可以映射为另一个范畴的元素,且元素间的关系也可以映射为另一范畴中的元素间的关系,则设为这两个范畴之间存在映射。所谓函子就是表示两个范畴之间的映射。...接下来看下在自函子的范畴上,怎样结合幺半群的定义得出Monad 假设我们有个cube函数,它计算一个数的三次方: cube :: Number -> Number 现在我们想在其返回值上添加一些调试信息...,返回一个元组,第二个元素代表调试信息,函数签名为: f :: Number -> (Number, String) 可以看到参数与返回值不一致。...fn :: (Number,String) -> (Number,String) fn . fn 这样是可行的,在验证满足结合律之前,我们引入一个liftM函数来辅助将f提升成fn liftM :: (

    8510

    函子到底是什么?ApplicativeMonad

    也就是说,如果我们要将普通函数应用到一个有盒子上下文包裹的值,那么我们首先需要定义一个叫Functor的数据类型,在这个数据类型中需要定义如何使用map或fmap来应用这个普通函数。...image.png fmap的输入参数是a->b函数,在我们这个案例中是(+3),然后定义一个函子Functor,这里是Haskell的Just 2,最后返回一个新的函子,在我们案例中,使用Haskell...image.png 之前我们讨论的是如何将一个普通函数应用到这个函子中,现在如果这个普通函数也是一个被上下文包裹的:就叫 Applicative。...它能知道如何应用一个被上下文包裹的函数到一个被上下文包裹的值中。 ? image.png Monad 函子funtor是将一个普通函数应用到包裹的值: ?...函数identity是一个自函数的特例,它接收什么参数就返回什么参数,所以入参和返回值不仅类型一致,而且值也相同。

    4.5K30

    函数式编程(FP)

    头等函数简单的讲就是函数也是一个对象,它能赋值给变量,能作为参数返回。 而高阶函数就是以函数为参数或返回的函数。...柯里化 (currying) 假设一个场景,我们需要写一个函数来判断一个人的年龄是否大于 18 岁。...当函数有多个参数的时候,我们可以对函数进行改造,只接收部分参数,然后返回一个函数继续等待接收剩余参数,并且返回相应的结果。...函子:一个特殊的容器,通过一个普通的对象来实现,该对象具有 map 方法, map 方法可以运行一个函数对值进行处理(变形关系)。..._value = value } //接收一个处理值的函数 map(fn){// map 是一个契约名称 fn 需要是一个纯函数 //返回一个新的函子 return new

    1.7K10

    JavaScript函数式编程之函子

    函子(Functor) 函子是一个特殊的容器,通过一个普通对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理(变形关系),容器包含值和值变形关系(这个变形关系就是函数)。...函数式编程中解决副作用的存在 函数式编程的运算不直接操作值,,而是由函子完成 函子就是一个实现了map契约的对象 我们可以把函子想象成一个盒子,盒子里面封装了一个值 想要处理盒子中的值,我们需要给盒子的...map方法传递一个处理值的函数(纯函数),由这个函数来对值进行处理 最终map方法返回一个包含新值所在的盒子(函子) 根据函子的定义我们创建一个函子 // functor 函子 class Container..._value()) IO 函子内部帮我们包装了一些函数,当我们传递函数的时候有可能这个函数是一个不纯的操作,不管这个函数纯与不纯,IO这个函子在执行的过程中它返回的这个结果始终是一个纯的操作,我们调用map...,这个方法返回一值的时候我们去调用map方法,当我们想要去调用一个方法,这个方法返回一个函子的时候我们去调用flatMap方法

    1.2K30

    精通JavaScript面试之什么是函数式编程?

    JavaScript中函数是一等公民,允许我们把函数作为数据 —— 把他们赋值给变量,传递到其他函数中,作为函数的返回值,等等 高阶函数是指那些把函数作为参数,或者返回一个函数,或者都有(即把函数作为参数...传入一个函数列表然后返回这些输入函数的某种组合 容器,函子,列表和流 函子是指能够被映射遍历的东西。...,使用像函子和高阶函数为了使用通用的工具函数来操作多种数据类型的抽象的概念十分重要。...具体的实现被抽象掉。 比如说,这个命令式的映射接受元素为数字的数组然后返回一个新的每个元素乘上2的数组。...这是表达式的所有例子: 2 * 2 doubleMap([2, 3, 4]) Math.max(4, 3, 2) 通常在代码中,你会看到表达式被赋值给一个标示符,从一个函数返回,或者传递给一个函数。

    88550

    泛函编程(4)-深入Scala函数类

    为了示范Scala的多态函数,我们先从下面的一个例子开始:从一个整数数组中找出第一个匹配数的位置: 1 def findFirstInt(arr: Array[Int], target: Int)...//> res53: Int = 2 10 findFirstInt(Array(2,4,3,9,0),7) //> res54: Int = -1 从一个字串数组中找出第一个匹配字串的位置...可以直接用一个函数文本表达这个结果:给我一个B=b,我返回给你一个C=f(a,b);一个典型的lambda表达式。...为什么费那么大的劲把函数变来变去呢?实际上这种函数变形在泛函编程中很普遍,是函数组合(Functional Composition)必须掌握的技巧。 函数变形在泛函编程中是常用的技巧。.... => n 1 def curryTwo[A,B,C](f: (A,B) => C): A => (B => C) 函数curryTwo把一个两个参数的函数转变成一个参数返回另一个同样是一个参数的函数

    565100

    C++11 lambda

    lambda和functor的函数调用执行的代码是相同的。唯一的区别是lambda的构造函数被内联到创建lambda的函数中,而不是像函子的构造函数那样是一个单独的函数。...总结主要区别: 1、函子和lambda总是传递一个this指针,而普通函数自然不是。这会消耗一个额外的寄存器和8个字节的堆栈空间。 Lambda“构造函数”被内联到创建Lambda的函数中。...对于普通函数而言,函数只是用来表达一个运算的过程,它无法记住运算过程中的一些状态数据。函数就像一个漏斗,数据可以从这个漏洞中流过,发生某些变化,但是这个漏斗什么都不会留下。...,我们可以为同一个类的不同对象可以分派不同的实现,从而实现不同的行为。...这种方式使得我们不在需要设计通过继承与虚函数来实现多态,无疑为程序库设计提供的新的方式。

    1.1K30

    函数式编程简介

    在函数式编程中,函数是第一类对象,意思是说一个函数,既可以作为其它函数的参数(输入值),也可以从函数中返回(输入值),被修改或者被分配给一个变量。...) 3.没有副作用,不修改外部变量的值,仅仅返回一个新的值,无其它行为 4.不修改状态,不修改系统变量,状态不能保存在变量中,函数式编程使用参数来保存状态,比如递归。...假设有一个 compose 函数,它可以接受多个函数作为参数,然后返回一个新的函数。当我们为这个新函数传递参数时,该参数就会「流」过其中的函数,最后返回结果。...***柯里化 (Currying)***柯里化是对函数的封装,当调用函数时传递参数数量不足时,会返回一个新的函数,直到参数数量足够时才进行求值。...***模式匹配 (Pattern matching)**模式匹配是指可以为一个函数定义多个版本,通过传入不同参数来调用对应的函数。

    65830

    15 分钟了解 Monad

    例子 1 日志 假设我们有三个只接受一个参数的函数, f1, f2, f3, 分别返回 +1, +2, +3 后的数局以及一 条关于做了什么操作的信息. def f1(x): return (x...unit 函数把参数 x 变成了 (int, str) 构成的 tuple. 接下来的 bind 函数调用了他的参数 f 函 数, 同时把结果累加到了形参 t 上....在这个例子中, 我们要开发一个程序, 给定一个 Employee, 比如说 john, 返回他的老 板的工资, 如果不能确定工资的话, 或者 john 是 None, 那么我们应该返回 None....比如说在我们之前的日志例子中, 输入类型和输出类型是不能匹配 的, 在第二个和第三个例子中, 函数是可以组合的, 但是我们想要在其中"注入"我们额外的逻辑....为了组合 bind 和 unit 函数, unit 和 bind 的返回值, 和 bind 的第一个参数必须是匹配的. 这 叫做 Monadic 类型.

    36010

    命令执行与代码执行漏洞原理

    如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。...System:system函数可以用来执行一个外部的应用程序并将相应的执行结果输出,函数原型如下: string system(string command, int&return_var) 其中,command...3.Passthru:passthru函数可以用来执行一个UNIX系统命令并显示原始的输出,当UNIX系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,需要使用passthru函数来替代system...web应用中通过system函来调用: system("/bin/program --arg$arg"); 2.系统的漏洞造成命令注入 bash破壳漏洞(CVE-2014-6271) 3.调用的第三方组件存在代码执行漏洞...尽量少用执行命令的函数,并在disable_functions中禁用 6.对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg

    2.4K30
    领券