classe (Referência C#)

As 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.
}

Observações

Apenas uma única herança é 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 herança de classe e implementação de interface:

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

As classes que você declara diretamente em 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, protegidos internamente, protegidos, internos, privados ou privados. Os membros são private por defeito.

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

Você pode 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 campos de classe, construtores e métodos. Ele também demonstra instanciação de objeto e impressão de dados de instância. Neste exemplo, duas classes são declaradas. A primeira classe, Child, contém dois campos privados (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 privados (name e age) só podem ser acessados através do método público da Child classe. Por exemplo, não é possível imprimir o nome da criança, a Main partir do método, usando uma instrução como esta:

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

O acesso a membros privados do Child from Main só seria possível se Main fosse um membro da classe.

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

Finalmente, observe que, para o objeto criado usando o construtor sem parâmetros (child3), o age campo 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 do C#.

Consulte também