Skip to content

Latest commit

 

History

History
34 lines (23 loc) · 2.63 KB

paru-faktov-o-svoistvah.md

File metadata and controls

34 lines (23 loc) · 2.63 KB

Осторожный подход к определению свойств

  • Свойства могут быть доступны только для чтения или только для записи, в то время как поля всегда доступны и для чтения, и для записи. Определяя свойство, лучше всего создавать для него оба метода доступа (get и set).

  • Свойство, являясь по сути методом, может выдавать исключения, а при обращениям к полям исключений не бывает.

  • Свойства нельзя передавать в метод в качестве параметров с ключевым словом out или ref, в частности, следующий код не компилируется:

  •  using System;
        public sealed class SomeType {       
          private static String Name {         
            get { return null; }         
            set {}
          }
      
          static void MethodWithOutParam(out String n) { n = null; }
      
          public static void Main() {         
            // При попытке скомпилировать следующую строку         
            // компилятор вернет сообщение об ошибке:        
            // error CS0206: A property or indexer may not        
            // be passed as an out or ref parameter.        
            MethodWithOutParam(out Name);      
          }    
      }
    
    
  • Свойство-метод может выполняться довольно долго, в то время как обращения к полям выполняются моментально. Часто свойства применяют для синхронизации потоков, но это может привести к приостановке потока на неопределенное время, поэтому свойства не следует использовать для этих целей — в такой ситуации лучше задействовать метод.

  • Свойство-метод может порождать видимые побочные эффекты, невозможные при доступе к полю. Иначе говоря, порядок определения значений различных свойств типа никак не должен влиять на поведение типа, однако в действительности часто бывает не так.