Compartilhar via


Design de parâmetro

As diretrizes neste tópico ajudá-lo selecionar os tipos corretos e os nomes dos parâmetros de membro. As seguintes tópicos também presentes diretrizes de projeto para os parâmetros.

Use o tipo de parâmetro derivado de menos que fornece a funcionalidade necessária para o membro.

O exemplo de código a seguir ilustra essa diretriz. The BookInfo classe herda a partir do Publication classe. The Manager classe implementa dois métodos: BadGetAuthorBiography e GoodGetAuthorBiography. BadGetAuthorBiography uses references to BookInfo objects even though it uses only members declared in Publication. The GoodGetAuthorBiography método demonstra o design correto.

' A Class with some basic information.
Public Class Publication
    Dim Protected authorValue as String
    Dim Protected publicationDateValue as DateTime

    Public Sub new(author as String, publishDate as DateTime)
        Me.authorValue = author
        Me.PublicationDateValue = publishDate
    End Sub

    Public Readonly Property  PublicationDate as DateTime 
        Get
            Return publicationDateValue
        End Get
    End Property

    Public Readonly Property Author as String
        Get 
            Return authorValue
        End Get
    End Property
End Class

' A Class that derives from Publication
Public Class BookInfo 
    Inherits Publication

    Dim isbnValue as String

    Public Sub new(author as string, _
        publishDate as DateTime, _
        isbn as String) 
        MyBase.New(author, publishDate)
        Me.isbnValue = isbn
    End Sub

    Public Readonly Property Isbn as String
        Get 
            Return isbnValue
        End Get
    End Property
End Class

Public Class Manager
    ' This method does not use the Isbn member
    ' so it doesn't need a specialized reference to Books
    Shared Function BadGetAuthorBiography(book as BookInfo) as String
        Dim biography as String = ""
        Dim author as String = book.Author
        ' Do work here.
        Return biography
    End Function

    ' This method shows the correct design.
    Shared Function GoodGetAuthorBiography(item as Publication) as String
        Dim biography as String = ""
        Dim author as String = item.Author
        ' Do work here.
        Return biography
    End Function
// A class with some basic information.
public class Publication
{
    string author;
    DateTime publicationDate;

    public Publication(string author, DateTime publishDate)
    {
        this.author = author;
        this.publicationDate = publishDate;
    }
    public DateTime PublicationDate
    {
        get {return publicationDate;}
    }
    public string Author
    {
        get {return author;}
    }
}

// A class that derives from Publication
public class BookInfo :Publication
{
    string isbn;
    public BookInfo(string author, DateTime publishDate, string isbn) :
            base(author, publishDate)
    {
        this.isbn = isbn;
    }
    public string Isbn
    {
        get {return isbn;}
    }
}

public class Manager
{
    // This method does not use the Isbn member
    // so it doesn't need a specialized reference to Books
    static string BadGetAuthorBiography(BookInfo book)
    {
        string biography = "";
        string author = book.Author;
        // Do work here.
        return biography;

    }
    // This method shows the correct design.
    static string GoodGetAuthorBiography(Publication item)
    {
        string biography = "";
        string author = item.Author;
        // Do work here.
        return biography;
    }

Não use parâmetros reservados.

Versões futuras de uma biblioteca podem adicionar novas sobrecargas que usam parâmetros adicionais.

Primeiro, o exemplo de código a seguir demonstra um método incorreto que viole essa diretriz e mostra os métodos com o design correto.

    Public Sub BadStoreTimeDifference (localDate as DateTime, _
        toWhere as TimeZone, _
        reserved as Object)
        ' Do work here.
    End Sub

Public Sub GoodCStoreTimeDifference (localDate as DateTime, _
    toWhere as TimeZone)
    ' Do work here.
End Sub

Public Sub GoodCStoreTimeDifference (localDate as DateTime, _
    toWhere as TimeZone, _
    useDayLightSavingsTime as Boolean)
    ' Do work here.
End Sub
    public void BadStoreTimeDifference (DateTime localDate, 
        TimeZone toWhere, 
        Object reserved)
    {
        // Do work here.
    }

public void GoodCStoreTimeDifference (DateTime localDate, 
    TimeZone toWhere)
{
    // Do work here.
}
public void GoodCStoreTimeDifference (DateTime localDate, 
    TimeZone toWhere, 
    bool useDayLightSavingsTime)
{
    // Do work here.
}

Não use sistema autônomo métodos expostos publicamente que adotam ponteiros, matrizes de ponteiros ou matrizes multidimensionais sistema autônomo parâmetros.

Conhecimento sobre esses recursos avançados não deve ser solicitado para usar a maioria das bibliotecas.

Coloque todos os parâmetros de saída após todos os parâmetros de passar por valor e ref (excluindo a matrizes de parâmetros), mesmo que isso resultados em uma inconsistência no parâmetro ordenação entre sobrecargas.

Esta convenção facilita a assinatura do método entender.

Seja consistente em parâmetros de nomeação quando substituindo membros ou implementar membros de interface.

Substituições devem usar os mesmos nomes de parâmetro. Sobrecargas devem usar sistema autônomo mesmos nomes de parâmetro sistema autônomo o membro declarativo. Implementações de interface devem usar os mesmos nomes definidos na assinatura do membro de interface.

Partes direitos autorais 2005 Microsoft Corporation. Todos os direitos reservados.

Partes direitos autorais Addison-Wesley Corporation. Todos os direitos reservados.

Para obter mais informações sobre diretrizes de design, consulte a "diretrizes de design do estrutura: Catálogo de convenções, idiomas e padrões para bibliotecas do .NET reutilizável"Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.

Consulte também

Outros recursos

Diretrizes de design de membro

Diretrizes de Design para desenvolvimento bibliotecas de classe