Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加上(a,b)和(a)加上(b)_C#_Javascript_C++_C - Fatal编程技术网

C# 加上(a,b)和(a)加上(b)

C# 加上(a,b)和(a)加上(b),c#,javascript,c++,c,C#,Javascript,C++,C,如何将方法(执行a+b并返回结果)从add(a,b)转换为a.add(b)? 我在某个地方读过这篇文章,我记不起这项技术叫什么了…… 这取决于语言吗 这在javascript中可能吗?在.NET中被调用 更新: 在javascript中,您可以执行以下操作: Number.prototype.add = function(b) { return this + b; }; var a = 1; var b = 2; var c = a.add(b); 在c#上,它被命名为扩展方法:

如何将方法(执行a+b并返回结果)从add(a,b)转换为a.add(b)?
我在某个地方读过这篇文章,我记不起这项技术叫什么了……
这取决于语言吗

这在javascript中可能吗?

在.NET中被调用


更新:

在javascript中,您可以执行以下操作:

Number.prototype.add = function(b) {
    return this + b;
};

var a = 1;
var b = 2;
var c = a.add(b);
在c#上,它被命名为扩展方法:

public static class IntExt
{
    public static int Add(this int a, int b)
    {
        return a + b;
    }
}
...
int c = a.Add(b);

例如,假设您想对C#中的整数执行此操作。您需要这样定义
扩展方法

public static class IntExtMethods
{
    public static int add(this int a, int b)
    {
        return a+b;
    }
}

在C#中,您可以使用。在C++中,需要创建属于为您执行添加的类的成员。C没有对象,因此您在C中找不到对象。

如果您想创建自己的JavaScript类:

function Num(v) {
    this.val = v;
}
Num.prototype = {
    add: function (n) {
        return new Num(this.val + n.val);
    }
};

var a = new Num(1);
var b = new Num(2);
var c = a.add(b); // returns new Num(3);

从字面上理解你的问题,我想你的意思是改变这个

var add = function(a, b) {
  return a + b;
}
为此:

a.add = function(b) {
  return this + b;
}

但是,这只会将该方法添加到,而不会添加到具有相同构造函数的任何其他对象。请参见Darin Dimitrov的答案,以了解这方面的示例。扩展本机数构造函数的原型不是很多人推荐的……

不可能没有子类的C++。@ KyNyTM:或者修改原始类。这在C语言中根本不可能。你为什么要这样做?破坏封装和混淆一个非常清晰的语法似乎会适得其反。这在javascript中也是可能的吗?
a.add = function(b) {
  return this + b;
}