Ik probeer onze applicatie een beetje netjes op te zetten qua OOP e.d. maar ik kom er niet helemaal uit met de properties overerving..... neem de teste code hieronder:
Nu heb ik bijvoorbeeld een class die een bestandsformaat omzet naar een document. Deze maakt dus vele verschillende shapes aan welke allemaal een kleur hebben, dus wil je zoals in regel 86 een generieke manier hebben om de kleur te zetten, net als vele andere properties en dergelijke die voor alle shapes gelijk zijn kunnen zijn, maar een andere implementatie hebben.
Hoe maak je deze OOP structuur nu goed? Want zoals je ziet, werkt deze implementatie niet lekker... De rectangle krijgt niet de niewe kleur, maar houdt zijn eigen kleur.
C#:
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
| using System; using System.Collections.Generic; using System.Text; namespace TestApplication { interface IShape { String Color { get; set; } String Form { get; set; } String GetForm(); } class Shape : IShape { private String _color = "Red"; public String Color { get { return _color; } set { _color = value; } } private String _form = "Shape"; public String Form { get { return _form; } set { _form = value; } } public virtual String GetForm() { return Form; } } class Rectangle : Shape { public new String Color = "Green"; public new String Form = "Rectangle"; public override String GetForm() { return Form; } } class Circle : Shape { public new String Form = "Circle"; public override String GetForm() { return Form; } } class Program { static void Main(string[] args) { Shape shape; if(new Random().Next(1,20) <= 10) shape = new Rectangle(); else shape = new Circle(); Console.WriteLine("shape.GetType()\t\t: " + shape.GetType().ToString()); Console.WriteLine(); Console.WriteLine("shape.Color\t\t: " + shape.Color); Console.WriteLine("shape.Form\t\t: " + shape.Form); Console.WriteLine("shape.GetForm()\t\t: " + shape.GetForm()); Console.WriteLine(); if (shape is Circle) { Circle circle = shape as Circle; Console.WriteLine("circle.Color\t\t: " + circle.Color); Console.WriteLine("circle.Form\t\t: " + circle.Form); Console.WriteLine("circle.GetForm()\t: " + circle.GetForm()); } else { Rectangle rectangle = shape as Rectangle; Console.WriteLine("rectangle.Color\t\t: " + rectangle.Color); Console.WriteLine("rectangle.Form\t\t: " + rectangle.Form); Console.WriteLine("rectangle.GetForm()\t: " + rectangle.GetForm()); } Console.WriteLine(); //Whatever shape it is, change its color......... shape.Color = "new color!"; Console.WriteLine("shape.Color\t\t: " + shape.Color); if (shape is Circle) Console.WriteLine("circle.Color\t\t: " + ((Circle)shape).Color); else Console.WriteLine("rectangle.Color\t\t: " + ((Rectangle)shape).Color); Console.ReadKey(); /* MOGELIJKE UITKOMST 1 shape.GetType() : TestApplication.Rectangle shape.Color : Red shape.Form : Shape shape.GetForm() : Rectangle rectangle.Color : Green rectangle.Form : Rectangle rectangle.GetForm() : Rectangle shape.Color : new color! rectangle.Color : Green */ /* MOGELIJKE UITKOMST 2 shape.GetType() : TestApplication.Circle shape.Color : Red shape.Form : Shape shape.GetForm() : Circle circle.Color : Red circle.Form : Circle circle.GetForm() : Circle shape.Color : new color! circle.Color : new color! */ } } } |
Nu heb ik bijvoorbeeld een class die een bestandsformaat omzet naar een document. Deze maakt dus vele verschillende shapes aan welke allemaal een kleur hebben, dus wil je zoals in regel 86 een generieke manier hebben om de kleur te zetten, net als vele andere properties en dergelijke die voor alle shapes gelijk zijn kunnen zijn, maar een andere implementatie hebben.
Hoe maak je deze OOP structuur nu goed? Want zoals je ziet, werkt deze implementatie niet lekker... De rectangle krijgt niet de niewe kleur, maar houdt zijn eigen kleur.