當運行的代碼此位的WriteLine顯示,Equation(10, 20)
是輸出到控制檯:支持轉換爲Boolean但仍然已經使用的ToString
public class Equation
{
public int a;
public int b;
public override string ToString()
{ return "Equation(" + a + ", " + b + ")"; }
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new Equation() { a = 10, b = 20 });
Console.ReadLine();
}
}
我想支持Equation
實例中的測試使用一個if
所以我允許隱式轉換Boolean
:
public class Equation
{
public int a;
public int b;
public override string ToString()
{ return "Equation(" + a + ", " + b + ")"; }
public static implicit operator Boolean(Equation eq)
{ return eq.a == eq.b; }
}
class Program
{
static void Main(string[] args)
{
if (new Equation() { a = 10, b = 10 })
Console.WriteLine("equal");
Console.WriteLine(new Equation() { a = 10, b = 20 });
Console.ReadLine();
}
}
但是,麻煩的是,現在,當我上Equation
使用WriteLine
,它得到的轉換ŧ o Boolean
而不是使用ToString
打印。
我該如何允許隱式轉換爲Boolean
,仍然有WriteLine
顯示使用ToString
?
更新
這個問題是由Equation
類SymbolicC++啓發。下面的代碼說明了一個Equation
可以經由cout
被顯示以及在if
的測試中使用:
auto eq = x == y;
cout << eq << endl;
if (eq)
cout << "equal" << endl;
else
cout << "not equal" << endl;
所以這是可能以某種方式在C++中。
哇,你釘牢了Mike。謝謝! – dharmatech
雖然「方程式」在您列出的語句中工作,但似乎它們不適用於運算符'||'和'&&'。只是想我會提到這個人誰正在考慮這個選項。 – dharmatech
@dharmatech正如我所說,它不再可以轉換爲'布爾'。你也可以重載'&'和'|'運算符,但是它的使用是有限的,因爲你仍然不能像'eq && true'這樣做。我真的同意Jon的評論,認爲這樣的事情有點太聰明,可能會讓代碼和未來維護者的消費者感到困惑。 –