Partilhar via


CA1819: Propriedades não devem retornar arrays

TypeName

PropertiesShouldNotReturnArrays

CheckId

CA1819

Category (Categoria)

Microsoft.Performance

A última alteração

Interromper

Faz com que

Um público ou propriedade protegida em um tipo público retornam uma matriz.

Descrição da regra

Matrizes retornadas por propriedades não são protegidos contra gravação, mesmo se a propriedade é somente leitura.Para manter a matriz inalterável, a propriedade deve retornar uma cópia da matriz.Normalmente, os usuários não compreenderão as implicações de desempenho de adversas chamar uma propriedade.Especificamente, podem usar a propriedade como uma propriedade indexada.

Como corrigir violações

Para corrigir uma violação de esta regra, a propriedade faz um método ou alterar a propriedade para retornar uma coleção.

Quando suprimir avisos

Atributos podem conter propriedades que as matrizes de retorno, mas não podem conter propriedades que retornam coleções.Você pode eliminar um aviso que é gerado para uma propriedade de um atributo que é derivado da classe de [System.Attribute] .Caso contrário, não elimina um aviso de esta regra.

Violação de exemplo

0fss9skc.collapse_all(pt-br,VS.110).gifDescrição

O exemplo a seguir mostra uma propriedade que viole esta regra.

0fss9skc.collapse_all(pt-br,VS.110).gifCódigo

Imports System 

Namespace PerformanceLibrary     

    Public Class Book         

        Private _Pages As String()       

        Public Sub New(ByVal pages As String())  
            _Pages = pages        
        End Sub         

        Public ReadOnly Property Pages() As String()            
            Get                
                Return _Pages            
            End Get            
        End Property     

    End Class 

End Namespace
using System; 

namespace PerformanceLibrary
{    
    public class Book    
    {        
        private string[] _Pages;      

        public Book(string[] pages)        
        {            
            _Pages = pages;        
        }         

        public string[] Pages        
        {            
            get { return _Pages; }        
        }    
    }
}

0fss9skc.collapse_all(pt-br,VS.110).gifComentários

Para corrigir uma violação de esta regra, a propriedade faz um método ou alterar a propriedade para retornar uma coleção em vez de uma matriz.

Altere a propriedade para um exemplo de método

0fss9skc.collapse_all(pt-br,VS.110).gifDescrição

O exemplo corrigir a violação alterando a propriedade para um método.

0fss9skc.collapse_all(pt-br,VS.110).gifCódigo

Imports System 

Namespace PerformanceLibrary     

    Public Class Book         

        Private _Pages As String()         

        Public Sub New(ByVal pages As String())            
            _Pages = pages        
        End Sub         

        Public Function GetPages() As String()      
            ' Need to return a clone of the array so that consumers            
            ' of this library cannot change its contents            
            Return DirectCast(_Pages.Clone(), String())        
        End Function     

    End Class 

End Namespace
using System; 

namespace PerformanceLibrary
{    
    public class Book    
    {        
        private string[] _Pages;         

        public Book(string[] pages)        
        {            
            _Pages = pages;        
        }         

        public string[] GetPages()        
        {            
            // Need to return a clone of the array so that consumers            
            // of this library cannot change its contents            
            return (string[])_Pages.Clone();        
        }    
    }
}

Retornar um exemplo de coleção

0fss9skc.collapse_all(pt-br,VS.110).gifDescrição

O exemplo corrigir a violação alterando a propriedade para retornar a

ReadOnlyCollection.

0fss9skc.collapse_all(pt-br,VS.110).gifCódigo

Imports System
Imports System.Collections.ObjectModel 

Namespace PerformanceLibrary     

    Public Class Book         

        Private _Pages As ReadOnlyCollection(Of String)         

        Public Sub New(ByVal pages As String())            
            _Pages = New ReadOnlyCollection(Of String)(pages)        
        End Sub         

        Public ReadOnly Property Pages() As ReadOnlyCollection(Of String)            
            Get                
                Return _Pages            
            End Get        
        End Property     

    End Class 

End Namespace
using System;
using System.Collections.ObjectModel; 

namespace PerformanceLibrary
{    
    public class Book    
    {        
        private ReadOnlyCollection<string> _Pages;         
        public Book(string[] pages)        
        {            
            _Pages = new ReadOnlyCollection<string>(pages);        
        }         

        public ReadOnlyCollection<string> Pages        
        {            
            get { return _Pages; }        
        }    
    }
}

Permitir que usuários modifiquem uma propriedade

0fss9skc.collapse_all(pt-br,VS.110).gifDescrição

Você pode querer permitir que o consumidor da classe modificar uma propriedade.O exemplo a seguir mostra uma propriedade de leitura/gravação. esta regra que viole

0fss9skc.collapse_all(pt-br,VS.110).gifCódigo

Imports System 

Namespace PerformanceLibrary     

    Public Class Book         

        Private _Pages As String()         

        Public Sub New(ByVal pages As String())            
            _Pages = pages        
        End Sub         

        Public Property Pages() As String()            
            Get                
                Return _Pages            
            End Get            

            Set(ByVal value as String())                
                _Pages = value            
            End Set        
        End Property     

    End Class 

End Namespace
using System; 

namespace PerformanceLibrary
{    
    public class Book    
    {        
        private string[] _Pages;         

        public Book(string[] pages)        
        {            
            _Pages = pages;        
        }         

        public string[] Pages        
        {            
            get { return _Pages; }            
            set { _Pages = value; }        
        }    
    }
}

0fss9skc.collapse_all(pt-br,VS.110).gifComentários

O exemplo corrigir a violação alterando a propriedade para retornar Collection.

0fss9skc.collapse_all(pt-br,VS.110).gifCódigo

Imports System
Imports System.Collections.ObjectModel 

Namespace PerformanceLibrary     

    Public Class Book         

        Private _Pages As Collection(Of String)         

        Public Sub New(ByVal pages As String())            
            _Pages = New Collection(Of String)(pages)        
        End Sub         

        Public ReadOnly Property Pages() As Collection(Of String)            
            Get                
                Return _Pages            
            End Get        
        End Property     

    End Class 

End Namespace
using System;
using System.Collections.ObjectModel; 

namespace PerformanceLibrary
{    
    public class Book    
    {        
        private Collection<string> _Pages;         

        public Book(string[] pages)        
        {            
            _Pages = new Collection<string>(pages);        
        }         

        public Collection<string> Pages        
        {            
            get { return _Pages; }        
        }    
    }
}

Regras relacionadas

CA1024: Usar propriedades onde for apropriado