C # - Estruturas
Em C #, uma estrutura é um tipo de dados de tipo de valor. Ajuda a fazer com que uma única variável contenha dados relacionados de vários tipos de dados. ostruct palavra-chave é usada para criar uma estrutura.
As estruturas são usadas para representar um registro. Suponha que você queira manter o controle de seus livros em uma biblioteca. Você pode querer rastrear os seguintes atributos sobre cada livro -
- Title
- Author
- Subject
- ID do livro
Definindo uma Estrutura
Para definir uma estrutura, você deve usar a instrução struct. A instrução struct define um novo tipo de dados, com mais de um membro para seu programa.
Por exemplo, aqui está a maneira de declarar a estrutura do Livro -
struct Books {
public string title;
public string author;
public string subject;
public int book_id;
};
O programa a seguir mostra o uso da estrutura -
using System;
struct Books {
public string title;
public string author;
public string subject;
public int book_id;
};
public class testStructure {
public static void Main(string[] args) {
Books Book1; /* Declare Book1 of type Book */
Books Book2; /* Declare Book2 of type Book */
/* book 1 specification */
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;
/* book 2 specification */
Book2.title = "Telecom Billing";
Book2.author = "Zara Ali";
Book2.subject = "Telecom Billing Tutorial";
Book2.book_id = 6495700;
/* print Book1 info */
Console.WriteLine( "Book 1 title : {0}", Book1.title);
Console.WriteLine("Book 1 author : {0}", Book1.author);
Console.WriteLine("Book 1 subject : {0}", Book1.subject);
Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);
/* print Book2 info */
Console.WriteLine("Book 2 title : {0}", Book2.title);
Console.WriteLine("Book 2 author : {0}", Book2.author);
Console.WriteLine("Book 2 subject : {0}", Book2.subject);
Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);
Console.ReadKey();
}
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Recursos de estruturas C #
Você já usou uma estrutura simples chamada Livros. As estruturas em C # são bastante diferentes daquelas em C ou C ++ tradicional. As estruturas C # têm os seguintes recursos -
As estruturas podem ter métodos, campos, indexadores, propriedades, métodos de operador e eventos.
As estruturas podem ter construtores definidos, mas não destruidores. No entanto, você não pode definir um construtor padrão para uma estrutura. O construtor padrão é definido automaticamente e não pode ser alterado.
Ao contrário das classes, as estruturas não podem herdar outras estruturas ou classes.
As estruturas não podem ser usadas como base para outras estruturas ou classes.
Uma estrutura pode implementar uma ou mais interfaces.
Os membros da estrutura não podem ser especificados como abstratos, virtuais ou protegidos.
Quando você cria um objeto de estrutura usando o Newoperador, ele é criado e o construtor apropriado é chamado. Ao contrário das classes, structs podem ser instanciados sem usar o operador New.
Se o operador New não for usado, os campos permanecerão sem atribuição e o objeto não poderá ser usado até que todos os campos sejam inicializados.
Classe versus Estrutura
Classes e estruturas têm as seguintes diferenças básicas -
- classes são tipos de referência e structs são tipos de valor
- estruturas não suportam herança
- estruturas não podem ter construtor padrão
À luz das discussões acima, vamos reescrever o exemplo anterior -
using System;
struct Books {
private string title;
private string author;
private string subject;
private int book_id;
public void getValues(string t, string a, string s, int id) {
title = t;
author = a;
subject = s;
book_id = id;
}
public void display() {
Console.WriteLine("Title : {0}", title);
Console.WriteLine("Author : {0}", author);
Console.WriteLine("Subject : {0}", subject);
Console.WriteLine("Book_id :{0}", book_id);
}
};
public class testStructure {
public static void Main(string[] args) {
Books Book1 = new Books(); /* Declare Book1 of type Book */
Books Book2 = new Books(); /* Declare Book2 of type Book */
/* book 1 specification */
Book1.getValues("C Programming",
"Nuha Ali", "C Programming Tutorial",6495407);
/* book 2 specification */
Book2.getValues("Telecom Billing",
"Zara Ali", "Telecom Billing Tutorial", 6495700);
/* print Book1 info */
Book1.display();
/* print Book2 info */
Book2.display();
Console.ReadKey();
}
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Title : C Programming
Author : Nuha Ali
Subject : C Programming Tutorial
Book_id : 6495407
Title : Telecom Billing
Author : Zara Ali
Subject : Telecom Billing Tutorial
Book_id : 6495700