C# 运算符重载
namespace Console运算符重载
{
/// <summary>
/// 这种写法类似于集成的计算方式,比较专业
/// </summary>
class Class1
{
public int a;
public int a1;
public Class1(int c, int b )
{
a = c;
a1 = b;
}
//public Class1(double cc)
//{
// a1 = cc;
//}
//说明:implicit 关键字隐式转换指定用在将 Class 类型转换成为 int 类型,换成 explicit 就会报错
//public static implicit operator Class1(int d)
//{
// return new Class1(d );
//}
//说明:explicit 关键字显式转换
public static explicit operator int(Class1 v)
{
return v.a;
}
public static explicit operator double(Class1 v)
{
return v.a1;
}
public static Class1 operator +(Class1 laft, Class1 right)
{
Console.WriteLine("laft+right:");
if (laft.a==right.a)
{
return new Class1(laft.a + right.a,laft.a1);
}
int result = laft.a * right.a1;
int result2 = right.a * right.a1;
return new Class1(result + result2, laft.a * right.a1);
}
public override string ToString()
{
string s = a.ToString() + "/" + a1.ToString();
return s;
}
}
}
//---------------------------------------------------------
class Test
{
static void Main(string[] args)
{
//Class1 clas = new Class1(44 );
//Console.WriteLine(clas.a);
//Class1 clas2 = new Class1(55d);
//Console.WriteLine("clas2.a1= "+clas2.a1.ToString("0.00"));
//装箱操作
int age = 22;
object o = age;
o = "aaa";
Console.WriteLine(o);
//Class1 c1 = 99;
//c1.a1 = -90;
//Console.WriteLine("c1.a1= {0} c1.a= {1}",c1.a1,c1.a);
Class1 clas = new Class1(10, 10);
Console.WriteLine("clas= "+clas.ToString());
Class1 clas1 = new Class1(10, 10);
Console.WriteLine("clas1= " + clas1.ToString());
Class1 cs2 = clas + clas1;
Console.WriteLine("cs2 = clas + clas1:{0}",cs2.ToString());
Class1 sc3 = new Class1(14, 7);
if (sc3==cs2)
{
Console.WriteLine("sc3: {0} cs2: {1}",sc3.ToString(),cs2.ToString());
}
}
}