Поделиться через


Разработка параметров

Обновлен: Ноябрь 2007

Указания данного раздела помогут вам выбрать правильные типы и имена для параметров членов. Правила использования параметров при проектировании также описаны в следующих разделах.

Рекомендуется использовать ближайший тип параметра, предоставляющий требуемую членом функциональность.

В следующем примере кода демонстрируется это правило. Класс BookInfo является производным классом класса Publication. В классе Manager реализованы два метода: BadGetAuthorBiography и GoodGetAuthorBiography. В методе BadGetAuthorBiography используются ссылки на объекты BookInfo, даже если он использует только члены, объявленные в Publication. В методе GoodGetAuthorBiography демонстрируется правильный подход.

' 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;
    }

Не следует использовать зарезервированные параметры.

В будущих версиях библиотеки могут быть добавлены новые расширения, которые могут использовать дополнительные параметры.

В следующем примере кода программы сначала демонстрируется неверный метод, нарушающий это правило, а затем – методы, использующие правильный подход.

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

Не используйте открытые незащищенные методы, получающие в качестве параметров указатели, массивы указателей или многомерные массивы.

Для использования большинства библиотек не требуется знания этих дополнительных подходов.

Размещайте все выходные параметры после всех параметров, передаваемых по значению и по ссылке (за исключением массивов параметров), даже если это приведет к неупорядоченности параметров в расширениях.

Это облегчает понимание описания метода.

Соблюдайте последовательность в именовании параметров при перегрузке членов или реализации интерфейсов.

При переопределении следует использовать те же самые имена параметров. При перегрузке следует использовать те же самые имена параметров, что и у перегружаемого члена. При реализации интерфейса следует использовать те же имена, определенные в описании интерфейса.

Охраняется авторским правом Copyright 2005 Microsoft Corporation. Все права защищены.

Охраняется авторским правом Copyright Addison-Wesley Corporation. Все права защищены.

Дополнительные сведения о руководствах по разработке см. в книге "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries", Krzysztof Cwalina and Brad Abrams, Addison-Wesley, 2005.

См. также

Другие ресурсы

Правила разработки членов

Руководство по разработке библиотек классов