File: interface.cs

package info (click to toggle)
mono-reference-assemblies 3.12.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 604,240 kB
  • ctags: 625,505
  • sloc: cs: 3,967,741; xml: 2,793,081; ansic: 418,042; java: 60,435; sh: 14,833; makefile: 11,576; sql: 7,956; perl: 1,467; cpp: 1,446; yacc: 1,203; python: 598; asm: 422; sed: 16; php: 1
file content (56 lines) | stat: -rw-r--r-- 1,123 bytes parent folder | download | duplicates (17)
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
using System;

namespace Obj {
	interface Measurable {
		double Area ();
	};
	class Obj : Measurable {
		public double Area () {
			return 0.0;
		}
	};
	class Rect : Obj {
		int x, y, w, h;
		public Rect (int vx, int vy, int vw, int vh) {
			x = vx;
			y = vy;
			w = vw;
			h = vh;
		}
		public new double Area () {
			return (double)w*h;
		}
	}
	class Circle : Obj {
		int x, y, r;
		public Circle (int vx, int vy, int vr) {
			x = vx;
			y = vy;
			r = vr;
		}
		public new double Area () {
			return r*r*System.Math.PI;
		}
	}
	class Test {
		static public int Main () {
			Obj rect, circle;
			double sum;
			rect = new Rect (0, 0, 10, 20);
			circle = new Circle (0, 0, 20);
			sum = rect.Area() + circle.Area ();
			/* surprise! this calls Obj.Area... */
			if (sum != 0.0)
				return 1;
			/* now call the derived methods */
			sum = ((Rect)rect).Area() + ((Circle)circle).Area ();
			if (sum != (200 + 400*System.Math.PI))
				return 2;
			/* let's try to cast to the interface, instead */
			sum = ((Measurable)rect).Area() + ((Measurable)circle).Area ();
			if (sum != 0.0)
				return 3;
			return 0;
		}
	};
};