class (Referência de C#)

Classes são declaradas usando a palavra-chave class, conforme mostrado no exemplo a seguir:

class TestClass
{
    // Methods, properties, fields, events, delegates
    // and nested classes go here.
}

Comentários

Somente a herança única é permitida em C#. Em outras palavras, uma classe pode herdar a implementação de apenas uma classe base. No entanto, uma classe pode implementar mais de uma interface. A tabela a seguir mostra exemplos de implementação de interface e herança de classe:

Herança Exemplo
Nenhum class ClassA { }
Single class DerivedClass : BaseClass { }
Nenhuma, implementa duas interfaces class ImplClass : IFace1, IFace2 { }
Única, implementa uma interface class ImplDerivedClass : BaseClass, IFace1 { }

Classes que você declara diretamente dentro de um namespace, não aninhadas em outras classes, podem ser públicas ou internas. As classes são internal por padrão.

Os membros da classe, incluindo classes aninhadas, podem ser públicos, internos protegidos, protegidos, internos, privados ou protegidos privados. Os membros são private por padrão.

Para obter mais informações, consulte Modificadores de Acesso.

É possível declarar classes genéricas que têm parâmetros de tipo. Para obter mais informações, consulte Classes genéricas.

Uma classe pode conter declarações dos seguintes membros:

Exemplo

O exemplo a seguir demonstra a declaração de métodos, construtores e campos de classe. Ele também demonstra a instanciação de objetos e a impressão de dados de instância. Neste exemplo, duas classes são declaradas. A primeira classe, Child, contém dois campos particulares (name e age), dois construtores públicos e um método público. A segunda classe, StringTest, é usada para conter Main.

class Child
{
    private int age;
    private string name;

    // Default constructor:
    public Child()
    {
        name = "N/A";
    }

    // Constructor:
    public Child(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    // Printing method:
    public void PrintChild()
    {
        Console.WriteLine("{0}, {1} years old.", name, age);
    }
}

class StringTest
{
    static void Main()
    {
        // Create objects by using the new operator:
        Child child1 = new Child("Craig", 11);
        Child child2 = new Child("Sally", 10);

        // Create an object using the default constructor:
        Child child3 = new Child();

        // Display results:
        Console.Write("Child #1: ");
        child1.PrintChild();
        Console.Write("Child #2: ");
        child2.PrintChild();
        Console.Write("Child #3: ");
        child3.PrintChild();
    }
}
/* Output:
    Child #1: Craig, 11 years old.
    Child #2: Sally, 10 years old.
    Child #3: N/A, 0 years old.
*/

Comentários

Observe que, no exemplo anterior, os campos particulares (name e age) só podem ser acessados por meio dos métodos públicos da classe Child. Por exemplo, você não pode imprimir o nome do filho, do método Main, usando uma instrução como esta:

Console.Write(child1.name);   // Error

Acessar membros particulares de Child de Main seria possível apenas se Main fosse um membro da classe.

Tipos declarados dentro de uma classe sem um modificador de acesso têm o valor padrão de private, portanto, os membros de dados neste exemplo ainda seriam private se a palavra-chave fosse removida.

Por fim, observe que, para o objeto criado usando o construtor sem parâmetro (child3), o campo age foi inicializado como zero por padrão.

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Confira também