如何重载前缀 ++ 和后缀 ++ 运算符 ++iis i+1 before read i;i++ is read i before i+1; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static string operator++(string x){ return x+x;}没测试,也许不对,关键是operator++,可以查查msdn c#里面是不允许自定义的操作符区分++i 和i++的,我以前做过一个测试,结果是一样的。 谢谢,turnmissile,您明白了我的意思,并给出了您以前的经验.鉴于我说的不太明白,以至于其他人误解了我的意思比如 在 c++ 中重载前缀 ++ 可以使用int 关键字作为参数 比如:#include <stdio.h>#include <iostream.h>class test{ public: int a; public: test operator ++(){ a++; return *this; } test operator ++(int){ //重载前缀 test test1=*this; a++; return test1; }};int main(int argc, char *argv[]){ test test2; test2.a = 200; cout << (test2++).a << endl; test2.a = 200; cout << (++test2).a << endl; return 0;}那么c# 那? 你们的星星好耀眼,请你们也照耀我一下.mvp 们,请帮一下忙好吗. 呀,查了一下msdn,发现自己说错了,与其它说不能区分,不如说你只要提供一个实现,编译器会自动帮你区别前缀++和后缀++ 请参考这个例子:public class integer{ public int i; public integer(int p_i) { this.i = p_i; } public static integer operator ++(integer i) { integer t_i = new integer(i.i); t_i.i++; return t_i; } public override string ToString() { return this.i.ToString(); }} class Class1 { [STAThread] static void Main(string[] args) { integer i = new integer(1); Console.WriteLine(i); //输出1; Console.WriteLine(i++); //输出1 Console.WriteLine(i); //输出2 Console.WriteLine(++i); //输出3 Console.WriteLine(i); //输出3 } }请顺便参考《C# language specification》 10.9.1节ms-help://MS.MSDNQTR.2003JUL.1033/csspec/html/vclrfcsharpspec_10_9_1.htm 我的这个问题的顺利解决得益于大家的热心帮忙,我在 特意向 cpptrier 表示我最诚挚的谢意,是他完整的解决了我的问题.其次,我要向turnmissle表达我的谢意,是他第一个明白了我的意图,并给出了您以前的经验.也谢谢其他参与的人. 问题的关键是在写++的时候,必须生成一个新的对象。这和编译器生成前缀++和后缀++的IL代码有关,如果不new一个新的对象,并返回,两种情况就一样了。 to cppTrier(JustinShen):嗬嗬,你的方法确实管用,我也知道为什么我以前的方法不能区分了。多谢了,我又长了一点经验值。你用的是:integer t_i = new integer(i.i);t_i.i++;return t_i;我的是:i.i++;return i;难怪不行。 tabControl的按钮上可以画图吗?怎么实现? 自定义类 在数组或list中如何应用?? 用 webBrowser1 怎樣取得 iframe 中的流內容? C/C++,VB,Java,C#程序员薪水问题调查(上海) 框架刷新问题 关于一个抽象和虚拟的问题 关于数据库连接登录 关于Decimal的默认小数位数 如何在KeyPress事件中判断是否按下方向键? C#中将double类型变量去除小数点后的0并加上千分符如何实现? 有高手来赐教吗?!!!里边请...... 求文件名正则表达式以及正则表达式相关资料
{
return x+x;
}没测试,也许不对,关键是operator++,可以查查msdn
我以前做过一个测试,结果是一样的。
鉴于我说的不太明白,以至于其他人误解了我的意思比如 在 c++ 中重载前缀 ++ 可以使用
int 关键字作为参数 比如:
#include <stdio.h>
#include <iostream.h>
class test
{
public:
int a;
public:
test operator ++(){
a++;
return *this;
}
test operator ++(int){ //重载前缀
test test1=*this;
a++;
return test1;
}
};int main(int argc, char *argv[])
{
test test2;
test2.a = 200;
cout << (test2++).a << endl;
test2.a = 200;
cout << (++test2).a << endl;
return 0;
}那么c# 那?
mvp 们,请帮一下忙好吗.
{
public int i;
public integer(int p_i)
{
this.i = p_i;
}
public static integer operator ++(integer i)
{
integer t_i = new integer(i.i);
t_i.i++;
return t_i; }
public override string ToString()
{
return this.i.ToString();
}
} class Class1
{
[STAThread]
static void Main(string[] args)
{
integer i = new integer(1);
Console.WriteLine(i); //输出1;
Console.WriteLine(i++); //输出1
Console.WriteLine(i); //输出2
Console.WriteLine(++i); //输出3
Console.WriteLine(i); //输出3
}
}请顺便参考《C# language specification》 10.9.1节ms-help://MS.MSDNQTR.2003JUL.1033/csspec/html/vclrfcsharpspec_10_9_1.htm
嗬嗬,你的方法确实管用,我也知道为什么我以前的方法不能区分了。多谢了,我又长了一点经验值。你用的是:
integer t_i = new integer(i.i);
t_i.i++;
return t_i;
我的是:
i.i++;
return i;难怪不行。