110,572
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace ConsoleApplication1
{
public class A
{
public List<string> s1 = new List<string>();
public List<int> s2 = new List<int>();
public static A operator +(A a, int x)
{
a.s2.Add(x);
return a;
}
public static A operator +(A a, string x)
{
a.s1.Add(x);
return a;
}
public static A operator ++(A a)
{
var b = new A();
b.s1 = a.s1;
b.s1.AddRange(a.s2.Select(x => x.ToString()));
b.s2 = a.s2.Select(x => x + 1).ToList();
return b;
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
a += 1234;
a += "1234";
Debug.Assert(a.s1.Count == 1);
var b = a++;
Debug.Assert(b.s2.First() == 1234);
Debug.Assert(a.s2.First() == 1235);
Console.ReadKey();
}
}
}
这样,我们使用比较精炼的语法来表达我们的意思,而不需要些成那种“方法(参数)”的复杂形式。
没有什么绝对的“可以、不可以”的是非,在一定的尺度下,灵活性最重要。主语 c1 = ....;
谓语 c2 = .....;
宾语 c3 = .....;
句子 clause = c1 + c2 + c3;
http://bbs.csdn.net/topics/360039451using System;
namespace Polymorphy
{
internal class Program
{
static void Main(string[] args)
{
AType instance = new AType(100);
AType i;
i = instance;
Console.WriteLine(instance++.data);
Console.WriteLine((++instance).data);
Console.WriteLine(instance.data);
//i输出的为原始值100
Console.WriteLine(i.data);
Console.ReadKey();
}
};
class AType
{
public int data;
public AType(int para)
{
this.data = para;
}
public static AType operator ++(AType para)
{
Console.WriteLine("执行重载运算符++");
return new AType(1 + para.data);
}
};
}
二、
using System;
namespace Polymorphy
{
internal class Program
{
static void Main(string[] args)
{
AType instance = new AType(100);
AType i;
i = instance;
Console.WriteLine(instance++.data);
Console.WriteLine((++instance).data);
Console.WriteLine(instance.data);
//现在i输出的为原始值102了
Console.WriteLine(i.data);
Console.ReadKey();
}
};
class AType
{
public int data;
public AType(int para)
{
this.data = para;
}
public static AType operator ++(AType para)
{
Console.WriteLine("执行重载运算符++");
para.data++;
return para;
}
};
}
由以上可以看出关键还是重载++返回的究竟是new产生的新对象还是原始对象。如果是返回新对象,则要对instance赋值?
大家觉得呢?