-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSample4.cs
68 lines (58 loc) · 2.76 KB
/
Sample4.cs
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
using System;
namespace csharp9.Test_PositionalRecord
{
//POSITIONAL RECORD = record + Ctor/Destructor - SINTASSI MINIMAL ALLA TS ^_^
record Person(string Firstname, string Lastname);
//ESEMPIO DI EREDITARIETA' RECORD -> PER ORA SI PUO' ESTENDERE SOLO record DA record FUTURO DA class!
record Student(string Firstname, string Lastname) : Person(Firstname, Lastname)
{
public int ID { get; init; }
//TODO CUSTOM ToString() -> ALTRIMENTI STAMPA ClassName + { prop = val, ...} = PrintMembers
/*public override string ToString()
{
System.Text.StringBuilder sb = new();
//base.PrintMembers(sb); //! IN VSCode/Omnisharp NON TROVA PrintMembers
//MA LA DOCUMENTAZIONE DICE CHE ESISTE https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9#record-types
return sb.ToString();
}*/
}
public static class Sample4
{
public static void Run()
{
Console.Write($"{nameof(Sample4)}\n{"".PadRight(80, '_')}\n");
//RECORD POSITION -> DEVO USARE COSTRUTTORE ESPLICITO PER CREARE IMMUTABLE CLASS (record)
var p = new Person("Zio", "Paperone");
//NON POSSO PIU' USARE object-initializer DIRETTAMENTE :-(
//p = new Person { Lastname = "Paperone", Firstname = "Zio" }; //TODO DECOMMENT SHOW ERROR
DisplayPerson(p);
var (first, last) = p; //ESEMPIO DESTRUCTOR
DisplayPerson((first, last));
//PERO' POSSO SEMPRE USARE with-expression PER CREARE NUOVI OGGETTI -> non-destructive mutation
var o = p with { Lastname = "Paperino" }; // ? NOTARE CHE with-expression USA object-initializer
DisplayPerson(o);
Console.WriteLine($"{o} == {p}? {o == p}"); //false OVVIO
Console.WriteLine("".PadRight(80, '-'));
//ESEMPIO DI CREAZIONE OGGETTO EREDITATO + object-initializer PER PROPS AGGIUNTIVE
p = new Student("Pippo", "Pluto")
{
ID = 123
};
DisplayPerson(p);
Console.WriteLine($"p? {p is Student} -> {p}"); //true OVVIO
//! NOTARE CHE with-expression CLONA Realtime-Type ANCHE SE PARTO DA base-type
var s = p with { Lastname = "Paperino" }; //? NOTARE CHE p E' DI TIPO Person!!
DisplayPerson(s);
Console.WriteLine($"s? {s is Student} -> {s}"); //! TRUE!!!
Console.Write($"{"".PadRight(80, '=')}\n\n\n");
}
static void DisplayPerson(Person p)
{
Console.WriteLine($"Ciao @{p}\n");
}
static void DisplayPerson((string Firstname, string Lastname) t)
{
Console.WriteLine($"t E' UNA TUPLA: {t.Firstname} {t.Lastname}");
}
}
}