blob: 9c1f79613429b0f0bce9002379ad2eed2bd96d2e (
plain)
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
|
using System;
using virtual_polyNamespace;
public class runme {
static void Main() {
NDouble d = new NDouble(3.5);
NInt i = new NInt(2);
//
// These two natural 'copy' forms fail because no covariant (polymorphic) return types
// are supported in C#.
//
// NDouble dc = d.copy();
// NInt ic = i.copy();
//
// Unlike C++, we have to downcast instead.
//
NDouble dc = (NDouble)d.copy();
NInt ic = (NInt)i.copy();
NDouble ddc = NDouble.narrow(dc);
NInt dic = NInt.narrow(ic);
dc = ddc; ic = dic; // warning suppression
virtual_poly.incr(ic);
if ( (i.get() + 1) != ic.get() )
throw new Exception("incr test failed");
//
// Checking a pure user downcast
//
NNumber n1 = d.copy();
NNumber n2 = d.nnumber();
NDouble dn1 = NDouble.narrow(n1);
NDouble dn2 = NDouble.narrow(n2);
if ( (dn1.get()) != dn2.get() )
throw new Exception("copy/narrow test failed");
//
// Checking the ref polymorphic case
//
NNumber nr = d.ref_this();
NDouble dr1 = NDouble.narrow(nr);
NDouble dr2 = (NDouble)d.ref_this();
if ( dr1.get() != dr2.get() )
throw new Exception("copy/narrow test failed");
}
}
|