50 lines
1008 B
C#
50 lines
1008 B
C#
|
using System;
|
||
|
|
||
|
class Foo {
|
||
|
static int t_count = 0, f_count = 0;
|
||
|
|
||
|
public static int Main ()
|
||
|
{
|
||
|
Console.WriteLine (t && f);
|
||
|
if (t_count != 1)
|
||
|
return 1;
|
||
|
if (f_count != 1)
|
||
|
return 2;
|
||
|
Console.WriteLine ();
|
||
|
Console.WriteLine (t && t);
|
||
|
if (t_count != 3)
|
||
|
return 3;
|
||
|
if (f_count != 1)
|
||
|
return 4;
|
||
|
Console.WriteLine ();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static MyBool t { get { Console.WriteLine ("t"); t_count++; return new MyBool (true); }}
|
||
|
static MyBool f { get { Console.WriteLine ("f"); f_count++; return new MyBool (false); }}
|
||
|
}
|
||
|
|
||
|
public struct MyBool {
|
||
|
bool v;
|
||
|
|
||
|
public MyBool (bool v) { this.v = v; }
|
||
|
|
||
|
public static MyBool operator & (MyBool x, MyBool y) {
|
||
|
return new MyBool (x.v & y.v);
|
||
|
}
|
||
|
|
||
|
public static MyBool operator | (MyBool x, MyBool y) {
|
||
|
return new MyBool (x.v | y.v);
|
||
|
}
|
||
|
|
||
|
public static bool operator true (MyBool x) {
|
||
|
return x.v;
|
||
|
}
|
||
|
|
||
|
public static bool operator false (MyBool x) {
|
||
|
return ! x.v;
|
||
|
}
|
||
|
|
||
|
public override string ToString () { return v.ToString (); }
|
||
|
}
|