C# 加上(a,b)和(a)加上(b)
如何将方法(执行a+b并返回结果)从add(a,b)转换为a.add(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#上,它被命名为扩展方法:
我在某个地方读过这篇文章,我记不起这项技术叫什么了……
这取决于语言吗 这在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;
}