[問題] 請教各位先進一個使用者自定轉換的問題
各位先進大家好
在這請教一個使用者自定轉換的問題
以下是我的小程式
using System;
class Fraction
{
private int denominator;
private int numerator;
public Fraction(int numerator, int denominator)
{
Console.WriteLine("Constructor a fractioin");
this.denominator = denominator;
this.numerator = numerator;
}
public Fraction(int wholenumber)
{
Console.WriteLine("In integer constructor");
numerator = wholenumber;
denominator = 1;
}
public static implicit operator Fraction(int theInt)
{
Console.WriteLine("Implicit changes to Fraction");
return new Fraction(theInt);
}
public static explicit operator int(Fraction theFraction)
{
Console.WriteLine("Explicit changes to int");
return theFraction.numerator/theFraction.denominator;
}
public static bool operator==(Fraction lhs, Fraction rhs)
{
Console.WriteLine("In == operator");
if((lhs.denominator == rhs.denominator) && (lhs.numerator == rhs.numerator))
{
return true;
}
else
return false;
}
public static bool operator!=(Fraction lhs, Fraction rhs)
{
Console.WriteLine("In != operator");
return !(lhs == rhs);
}
public override bool Equals(object o)
{
Console.WriteLine("In Equals()");
if(!(o is Fraction))
{
return false;
}
else
return this == (Fraction)o;
}
public static Fraction operator+(Fraction lhs, Fraction rhs)
{
Console.WriteLine("In operator + ");
if(lhs.denominator == rhs.denominator)
{
return new Fraction(lhs.numerator + rhs.numerator, lhs.denominator);
}
else
{
return new Fraction(lhs.numerator * rhs.denominator + rhs.numerator * lhs.denominator, lhs.denominator * rhs.denominator);
}
}
public override string ToString()
{
Console.WriteLine("In ToString()");
string s = numerator.ToString() + "/" + denominator.ToString();
return s;
}
}
class MainClass
{
public static void Main()
{
int result = 0;
Fraction f1 = new Fraction(3, 4);
Console.WriteLine("f1:{0}", f1.ToString());
Fraction f2 = new Fraction(2, 4);
Console.WriteLine("f2:{0}", f2.ToString());
Fraction f3 = f1 + f2;
Console.WriteLine("f3:{0}", f3.ToString());
Fraction f4 = f3 + 5;
Console.WriteLine("f4:{0}", f4.ToString());
result = f2;//這裡會出現編譯錯誤
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Console.WriteLine("result = {0}", result);
}
}
在result = f2這裡會出現編譯錯誤的狀況
然而我在上段的程式碼裡面也已經定義了 explicit 的轉換規則
卻又出現了編譯錯誤的狀況
因此想請教各位先進我是哪裡出錯了呢
望請各位不吝指教
謝謝嚕~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.235.181
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章