Partager via


Conception de paramètres

Les règles de cette rubrique vous aident à sélectionner les types et noms corrects des paramètres de membre. Les rubriques suivantes présentent également des règles de conception pour les paramètres.

Utilisez le type de paramètres le moins dérivé fournissant les fonctionnalités requises par le membre.

L'exemple de code suivant illustre cette règle. La classe BookInfo hérite de la classe Publication. ManagerLa classe implémente deux méthodes : BadGetAuthorBiography etGoodGetAuthorBiography. BadGetAuthorBiography utilise des références auxBookInfo objets bien qu'elle utilise uniquement des membres déclarés dansPublication. La méthode GoodGetAuthorBiography illustre le design correct.

' 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;
    }
// A class with some basic information.
public ref class Publication
{
private:
    String^ author;
    DateTime publicationDate;

public:
    Publication(String^ author, DateTime publishDate)
    {
        this->author = author;
        this->publicationDate = publishDate;
    }

    property DateTime PublicationDate
    {
        DateTime get() {return publicationDate;}
    }

    property String^ Author
    {
        String^ get() {return author;}
    }
};

// A class that derives from Publication
public ref class BookInfo : public Publication
{
private:
    String^ isbn;

public:
    BookInfo(String^ author, DateTime publishDate, String^ isbn) :
            Publication(author, publishDate)
    {
        this->isbn = isbn;
    }

    property String^ Isbn
    {
        String^ get() {return isbn;}
    }
};

private enum class ErrorOptions {ThrowOnError};

private enum class CasingOptions {CaseInsensitive};

private ref class BetterType
{
internal:
    static void GetType(String^ name,
    ErrorOptions throwOption,
    CasingOptions caseOption)
    {}
};

public ref class Manager
{
public:
    // 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'utilisez pas de paramètre réservé.

Les futures versions d'une bibliothèque peuvent ajouter de nouvelles surcharges qui prennent des paramètres supplémentaires.

L'exemple de code suivant montre d'abord une méthode incorrecte, contraire à la présente règle, puis des méthodes correctement conçues.

    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.
}
void BadStoreTimeDifference(DateTime localDate,
    TimeZone^ toWhere,
    Object^ reserved)
{
    // Do work here.
}

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

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

N'utilisez pas des méthodes exposées publiquement qui prennent des pointeurs, des tableaux de pointeurs ou des tableaux multidimensionnels comme paramètres.

Il n'est pas obligatoire de connaître ces fonctionnalités avancées pour utiliser la plupart des bibliothèques.

Placez tous les paramètres de sortie (out) après tous les paramètres de référence et passés par valeur (à l'exclusion des tableaux de paramètres), même si cela se traduit par une incohérence dans l'ordre des paramètres d'une surcharge à une autre.

Cette convention rend la signature de méthode plus facile à comprendre.

Soyez cohérent dans les noms que vous attribuez aux paramètres lorsque vous substituez des membres ou que vous implémentez des membres d'interface.

Les substitutions doivent utiliser les mêmes noms de paramètres. Les surcharges doivent utiliser les mêmes noms de paramètres que le membre de déclaration. Les implémentations d'interface doivent utiliser les mêmes noms que ceux définis dans la signature de membre d'interface.

Portions Copyright 2005 Microsoft Corporation. Tous droits réservés.

Portions Copyright Addison-Wesley Corporation. Tous droits réservés.

Pour plus d'informations sur les règles de conception, consultez « règles de conception d'infrastructure : Conventions idiomes et modèles carnet de bibliothèques réutilisables framework » Krzysztof Cwalina et Brad Abrams, publiés par Addison-Wesley, 2005.

Voir aussi

Autres ressources

Instructions de conception des membres

Instructions de conception pour le développement de bibliothèques de classes