Construtores de Classe
Um construtor de classe é o mesmo que um construtor de struct. Trata-se de um método executado quando um objeto é criado.
A sintaxe para criar um construtor é a seguinte:
index.cs
1234567class className { // ... other class code public className() { // code } }
Por exemplo:
index.cs
1234567891011121314151617using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }
É possível observar na saída que a instrução Console.WriteLine
dentro do construtor Player
é executada toda vez que um novo objeto é criado.
No C# 9 e em versões anteriores do C#, existem algumas diferenças entre os construtores de structs e classes. Por exemplo, em versões antigas, não é possível criar construtores sem parâmetros para Structs; entretanto, no C# 10 e versões mais recentes, isso é suportado. Recomenda-se utilizar a versão mais recente dos compiladores C# para evitar possíveis erros ao compilar parte do código.
A seguir está um exemplo de código do capítulo Construtores de Structs. O termo static
é explicado nos comentários, pois é mais relevante aqui, porém não é necessário compreendê-lo completamente neste momento, já que esse conceito será detalhado em seções posteriores.
Diferente dos campos normais, um campo static pode armazenar dados mesmo que não exista nenhum objeto daquela classe. Campos estáticos possuem o mesmo valor para todos os objetos, portanto, alterar o valor de um campo estático em um objeto altera para todos os objetos. A classe Program representa o próprio programa, portanto, se o campo estático for um membro da classe 'Program', ele atua como uma variável global.
index.cs
1234567891011121314151617181920212223using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Para converter a struct Player
em uma classe, basta alterar o termo struct
para class
:
index.cs
12345678910111213141516171819202122232425262728using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Da mesma forma, também é possível ter construtores com alguns argumentos. Normalmente, esse método é utilizado para facilitar a inicialização dos campos da classe:
index.cs
12345678910111213141516171819202122232425262728using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }
Neste ponto, você já abordou a maioria dos conceitos básicos de Classes
, e, julgando pela sintaxe e comportamento, Classes
parecem ser exatamente iguais a Structs
, porém, isso não é verdade. Conforme mencionado no primeiro capítulo desta seção, Structs são uma versão limitada das Classes que fornecem apenas funcionalidades básicas, enquanto os recursos das Classes são muito mais complexos e amplos. Nesta seção, você viu todos os recursos que são semelhantes entre Classes
e Structs
. Nas próximas duas seções, você aprenderá todas as particularidades das classes e da programação orientada a objetos.
1. Quando um método construtor é chamado?
2. Qual será o nome de um método construtor em uma classe chamada "Animal"?
3. Qual palavra-chave é usada antes do nome de um construtor?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 2.04
Construtores de Classe
Deslize para mostrar o menu
Um construtor de classe é o mesmo que um construtor de struct. Trata-se de um método executado quando um objeto é criado.
A sintaxe para criar um construtor é a seguinte:
index.cs
1234567class className { // ... other class code public className() { // code } }
Por exemplo:
index.cs
1234567891011121314151617using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }
É possível observar na saída que a instrução Console.WriteLine
dentro do construtor Player
é executada toda vez que um novo objeto é criado.
No C# 9 e em versões anteriores do C#, existem algumas diferenças entre os construtores de structs e classes. Por exemplo, em versões antigas, não é possível criar construtores sem parâmetros para Structs; entretanto, no C# 10 e versões mais recentes, isso é suportado. Recomenda-se utilizar a versão mais recente dos compiladores C# para evitar possíveis erros ao compilar parte do código.
A seguir está um exemplo de código do capítulo Construtores de Structs. O termo static
é explicado nos comentários, pois é mais relevante aqui, porém não é necessário compreendê-lo completamente neste momento, já que esse conceito será detalhado em seções posteriores.
Diferente dos campos normais, um campo static pode armazenar dados mesmo que não exista nenhum objeto daquela classe. Campos estáticos possuem o mesmo valor para todos os objetos, portanto, alterar o valor de um campo estático em um objeto altera para todos os objetos. A classe Program representa o próprio programa, portanto, se o campo estático for um membro da classe 'Program', ele atua como uma variável global.
index.cs
1234567891011121314151617181920212223using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Para converter a struct Player
em uma classe, basta alterar o termo struct
para class
:
index.cs
12345678910111213141516171819202122232425262728using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Da mesma forma, também é possível ter construtores com alguns argumentos. Normalmente, esse método é utilizado para facilitar a inicialização dos campos da classe:
index.cs
12345678910111213141516171819202122232425262728using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }
Neste ponto, você já abordou a maioria dos conceitos básicos de Classes
, e, julgando pela sintaxe e comportamento, Classes
parecem ser exatamente iguais a Structs
, porém, isso não é verdade. Conforme mencionado no primeiro capítulo desta seção, Structs são uma versão limitada das Classes que fornecem apenas funcionalidades básicas, enquanto os recursos das Classes são muito mais complexos e amplos. Nesta seção, você viu todos os recursos que são semelhantes entre Classes
e Structs
. Nas próximas duas seções, você aprenderá todas as particularidades das classes e da programação orientada a objetos.
1. Quando um método construtor é chamado?
2. Qual será o nome de um método construtor em uma classe chamada "Animal"?
3. Qual palavra-chave é usada antes do nome de um construtor?
Obrigado pelo seu feedback!