1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
using System;
struct PointF {
public float fa, fb;
public PointF (float a, float b)
{
fa = a;
fb = b;
Console.WriteLine ("PointF created {0} and {1}", fa, fb);
}
}
struct Point {
int ia, ib;
public static implicit operator PointF (Point pt)
{
return new PointF (pt.ia, pt.ib);
}
public Point (int a, int b)
{
Console.WriteLine ("Initialized with {0} and {1}", a, b);
ia = a;
ib = b;
}
}
class X {
static bool ok = false;
PointF field;
static bool Method (PointF f)
{
Console.WriteLine ("Method with PointF arg: {0} {1}", f.fa, f.fb);
if (f.fa != 100 || f.fb != 200)
return false;
return true;
}
static bool Call_constructor_and_implicit ()
{
ok = false;
return Method (new Point (100, 200));
}
static bool Init_with_implicit_conv ()
{
PointF p = new Point (1, 100);
if (p.fa == 1 && p.fb == 100)
return true;
return false;
}
static bool Init_ValueType ()
{
Point p = new Point (100, 200);
return Method (p);
}
static bool InstanceAssignTest ()
{
X x = new X ();
x.field = new Point (100, 200);
if (x.field.fa != 100 || x.field.fb != 200)
return false;
return true;
}
static int T ()
{
if (!Init_with_implicit_conv ())
return 100;
if (!Call_constructor_and_implicit ())
return 101;
if (!Init_ValueType ())
return 102;
if (!InstanceAssignTest ())
return 103;
return 0;
}
public static int Main ()
{
int t = T ();
if (t != 0)
Console.WriteLine ("Failed on test: " + t);
Console.WriteLine ("Succeed");
return t;
}
}
|