Sdílet prostřednictvím


CA1819: Vlastnosti by neměly vracet pole

Název_typu

PropertiesShouldNotReturnArrays

CheckId

CA1819

Kategorie

Microsoft.Performance

Změnit rozdělení

Rozdělení

Příčina

Veřejné nebo chráněná vlastnost veřejné typu vrátí pole.

Popis pravidla

Vrácený vlastností polí nejsou chráněna proti zápisu, i když je vlastnost pouze pro čtení.Aby osvědčenou pole vlastnost musí vrátit kopii pole.Uživatelé obvykle nebude porozumět výkonu nepříznivé důsledky volání těchto vlastností.Konkrétně mohou využít vlastnost jako indexovaná vlastnost.

Jak vyřešit narušení

Opravit porušení tohoto pravidla, byla vlastnost metoda nebo vlastnost vrátit kolekci změnit.

Při potlačení upozornění

Atributy mohou obsahovat vlastnosti, které vrátí matice, ale nemohou obsahovat vlastnosti, které vracejí kolekcí.Můžete potlačit varování, že je aktivována pro vlastnost atribut, který je odvozen z [System.Attribute] třídy.Jinak Nepotlačovat upozornění od tohoto pravidla.

Příklad narušení

Description

Následující příklad ukazuje vlastnost, která toto pravidlo porušují.

Kód

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

Komentáře

Porušení tohoto pravidla stanovit, byla vlastnost metoda nebo vlastnost vrátit kolekci místo pole změnit.

Změňte vlastnost příkladu metoda

Description

Následující příklad řeší porušení změnou vlastnosti metody.

Kód

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();        
        }    
    }
}

Vrátí kolekci příklad

Description

Následující příklad řeší porušení změnou vlastnosti vrátit

ReadOnlyCollection.

Kód

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

Umožnit uživatelům změnit vlastnost

Description

Můžete umožnit spotřebiteli třídy upravit vlastnost.V následujícím příkladu je vlastnost pro čtení i zápis, která poruší toto pravidlo.

Kód

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

Komentáře

Následující příklad řeší porušení změnou vlastnosti vrátit Collection.

Kód

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

Souvisejících pravidel

CA1024: Použijte vlastnosti, kde je to vhodné