-
Notifications
You must be signed in to change notification settings - Fork 0
/
Viatura.cs
151 lines (117 loc) · 3.58 KB
/
Viatura.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
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TS_Aula1
{
/**
* SCOPES:
* private = (so visível na classe),
* protected = (visível na classe e nas suas derivadas),
* internal ,
* public
*/
public interface ICarro //a interface define, no minimo, estas regras quando se cria uma class
{
String Modelo { get; }
String Marca { get; }
int Velocidade { get; set; }
int Distancia { set; }
void Acelerar();
}//fim da interface
public class Viatura
{
//Campos := Variáveis declaradas ao nível da classe
public String marca;
private String _modelo = "Modelo Não Definido"; //o underscore é usado para as var privadas
private int _velocidade;
private static Random _rnd = new Random(); //Fixed by Ivo Protásio (@ivoprotasioAltyra)
public static int total;
#region Propriedades
public String Modelo
{
get { return _modelo; } //o user so pode ver a variável. Para definir, o set tem que estar descomentado
//set { }
}
public int Velocidade
{
get { return _velocidade; }
set
{
if (value > 0) this._velocidade = value;
}
}
public void Acelerar()
{
int n = _rnd.Next(0, 201);
// Can return 0,..., 200
this._velocidade = n;
this.Ver();
}
public virtual void Ver()
{
//Console.WriteLine("Marca: {0}", marca);
Console.WriteLine("\n--------------(" + this.marca + ")--------------");
Console.WriteLine("Modelo: {0}", _modelo);
Console.WriteLine("Velocidade:" + this._velocidade.ToString());
Console.WriteLine("Total: {0}", total);
}
#endregion
#region Construtor
public Viatura() //exemplo overload
{
total++;
this.marca = "Marca Não Definida";
}
public Viatura(String par_marca, String modelo)
{
total++;
this.marca = par_marca;
this._modelo = modelo;
}
public Viatura(string marca, string modelo, int velocidade) : this(marca, modelo) //exemplo overload nr2
{
this.Velocidade = 0;
}
#endregion
~Viatura() //método destrutor
{
Console.WriteLine("O {0} foi destruído!", this._modelo);
total--;
}
} //fim da class
public class Carro : Viatura, ICarro
{
private int _distancia;
#region Contrutores
public Carro() : base()
{
_distancia = 0;
}
public Carro(String marca, String modelo) : base(marca, modelo)
{
_distancia += Velocidade;
}
public Carro(String marca, String modelo, int velocidade) : base(marca, modelo, velocidade)
{
_distancia += velocidade;
}
public string Marca => throw new NotImplementedException();
public int Distancia
{
get { return _distancia; }
set
{
if (value > 0) _distancia = value;
}
}
#endregion
//Override
public override void Ver() //só consigo fazer override se o método Ver() for virtual ou abstract
{
base.Ver();
Console.WriteLine("Distância: {0}", _distancia);
}
}
}