You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: notes_wpfw/csharp/wpfw_deel1/week1/csharp.md
+32-14
Original file line number
Diff line number
Diff line change
@@ -174,7 +174,7 @@ interface IConsumer<in T> //Contravariance, in, low to high, args.
174
174
175
175
classProducer<T> : IProducer<T> //Covariance, return, no args.
176
176
{
177
-
publicTProduce() =>default(T);
177
+
publicTProduce() =>default;
178
178
}
179
179
180
180
classConsumer<T> : IConsumer<T> //Contravariance, no return, args.
@@ -214,6 +214,8 @@ public class Program
214
214
215
215
```
216
216
217
+
> Het volgende resultaat is: This contravariance returns: h.
218
+
217
219
## Generics and Generic Type Constraints
218
220
219
221
Wat zijn #generics? #Generics zijn waardes die je kan toekennen om #type-safety te garanderen. Elke letter geeft aan van welke type het moet zijn en die kun je met Generic Type Constraints beheren. De hoofdletters tussen <> zijn de generics. In dit voorbeeld kan #T voor elk mogelijk datatype gebruikt worden mits die aan de voorwaarden voldoet die je eraan geeft.
@@ -294,9 +296,9 @@ public class Program
294
296
};
295
297
296
298
vardata=newList<Initializer<float>> { initialize }; // For illustration purposes. You can do with the List whatever your want.
297
-
varprint=$"The following latitude/longtitude are: {initialize.Latitude} and {initialize.Longtitude}.\n";
298
-
299
-
Console.WriteLine(print);
299
+
varprint=$"The following latitude/longtitude are: {initialize.Latitude} and {initialize.Longtitude}.\n";
300
+
Console.WriteLine(print);
301
+
//The following latitude/longtitude are: 6.490459 and 2.640913.
300
302
}
301
303
302
304
publicstaticvoidMain() {} //Call method here between {}.
@@ -306,6 +308,8 @@ public class Program
306
308
307
309
```
308
310
311
+
> Resultaat: The following latitude/longtitude are: 6.490459 and 2.640913.
312
+
309
313
Omdat de eerste variabele het juiste type heeft, kunnen we hiervan een #List initializer van maken. Ook dit gaat tussen de { }. Vervolgens printen we dit op het scherm en krijg je nieuwste waarde terug. Als je de #generics datatype hier aanpast, moeten beide variabelen compatibel zijn, anders moet je een extra #generics type in de #struct zetten: #R. Mag ook anders heten.
310
314
311
315
## Operator Overloading
@@ -319,8 +323,7 @@ Daarnaast moet het return type overeen komen met het type die je in de #class, #
Console.WriteLine($"Result after operator overloading is: {c.Result}.\n");
348
+
Console.WriteLine($"Result after operator overloading is: {c.Result}.\n");
349
+
//Result after operator overloading is: 4.
346
350
}
347
351
348
352
publicstaticvoidMain() {} //Call method here between {}.
@@ -352,6 +356,8 @@ public class Program
352
356
353
357
```
354
358
359
+
> Resultaat: Result after operator overloading is: 4.
360
+
355
361
Hier maken we een method, waarin we de #operator gaan implementeren. We maken twee impliciete variabelen aan met onze struct #Overloading . Die krijgen het type die we aan hebben gegeven in de #struct , namelijk #uint / #u32. Daarna tellen we die op en tonen we dit in de #Console. Het resultaat is niet 6 + 2 = 8, maar 6 - 2 = 4. Het return type is leidend.
356
362
357
363
Je kunt deze twee stukken #code uitvoeren en kijken wat het precies doet. Deed het wat je had verwacht? Roep de Operator method aan in Main en zie wat er gebeurd. Probeer eens een keer of een min in variabele c aan te passen. Krijg je een foutmelding of gaat dit goed? Wat gebeurd er wanneer je het return arithmatic operatoie aanpast? Test dit uit en zie wat er tevoorschijn komt.
Task.Delay(75).Wait(); //Wait required with a delay of 0.075 seconds.
68
70
});
69
71
}
70
72
71
73
Console.WriteLine("All downloads and processes completed!!!");
72
-
awaitTask.CompletedTask;
74
+
awaitTask.CompletedTask; //Wait for the Task to complete.
73
75
}
74
76
}
75
77
@@ -107,7 +109,7 @@ WhenAny //Task<Task>
107
109
Yield//YieldAwaitable
108
110
```
109
111
110
-
> Je hoeft niet alles uit je hoofd te kennen. Waarschijnlijk zul je zelf maar maximaal 3 nodig hebben. Delay, Run en CompletedTask gebruik je het meest. Maar FromResult kan handig zijn als je in een synchroon programma werkt, waarin je niet met async en #await bezig bent.
112
+
> Je hoeft niet alles uit je hoofd te kennen. Waarschijnlijk zul je zelf maar maximaal 3 nodig hebben. Delay, Run en CompletedTask gebruik je het meest. Maar FromResult kan handig zijn als je in een synchroon programma werkt, waarin je niet met async en #await bezig bent. Er zijn meer methods beschikbaar wanneer je deze chaint, zoals bijvoorbeeld Wait.
111
113
112
114
### Running Main Program
113
115
@@ -127,7 +129,7 @@ public class Program
127
129
128
130
```
129
131
130
-
> Hier roepen we de objecten aan. Nadat de downloads klaar zijn, zie je: Awaiting processes... verschijnen. Dit heeft een vertraging van 1,5 seconden.
132
+
> Hier roepen we de objecten aan. Nadat de downloads klaar zijn, zie je: Awaiting processes... verschijnen. Dit heeft een vertraging van 1,5 seconden. Het is mogelijk een locale variabele aan te maken die async heet.
0 commit comments