2016-10-24 3 views
1

я в настоящее время этот код написан:Есть ли причина использовать очень простые свойства над полями?

public class General 
{ 
    /// <summary> 
    /// Private variables. 
    /// </summary> 
    private const float fVersion = 1.3f; 
    private static bool bMonitoring = false; 

    /// <summary> 
    /// Retrieves the current version of the application. 
    /// </summary> 
    public static float Version 
    { 
     get 
     { 
      return fVersion; 
     } 
    } 

    /// <summary> 
    /// Are we monitoring performance? 
    /// </summary> 
    public static bool Monitoring 
    { 
     get 
     { 
      return bMonitoring; 
     } 

     set 
     { 
      bMonitoring = value; 
     } 
    } 
} 

В случае, если я проверяю для General.bMonitoring или General.Version часто (! Возможно .. более 100 раз в секунду), и на самом деле заботится о производительности: это хорошая практика, чтобы оставить свой класс написано так, или я должен просто удалить эти свойства и сделать поля общедоступными?

+0

Я думаю, что вы не должны заботиться о с этим. Но доступ к этим значениям с помощью метода get походит на метод вызова, я думаю. Если вы прямо вызываете свое значение из значений static class и const, я думаю (необходимо проверить), вы избежите микровызов для материала метода и цикла возврата. – pix

+0

Я действительно забочусь, потому что в моем случае мое приложение читает из памяти другой программы 1000 раз в секунду (цикл 'while' с' Thread.Sleep (1); 'поэтому я предпочитаю никогда не отставать. – shavit

+0

http: // stackoverflow .com/questions/295104/what-is-the-difference-from-a-field-and-a-property-in-c –

ответ

2

В этом случае, если вы не собираетесь добавить логику геттер или сеттера, то я бы использовать статические поля. Производительность будет одинаковой.

Но если вам понадобится дополнительная логика, когда вы устанавливаете ot get values, тогда он предпочитает использовать свойства, потому что он позволяет управлять версиями и дает вам инкапсуляцию в соответствии с принципами ООП. Не заботьтесь о производительности

Monitoring Для недвижимости, которую можно использовать Auto-Реализовано свойство как

public static bool Monitoring { get; set; } 

, но в этом случае вам нужно реализовать статический конструктор (благодаря @Mafii)

static General() 
    { 
     Monitoring = false; 
    } 

или если вы используете C# 6.0, то просто:

public static bool Monitoring { get; set; } = false; 
+0

Если я установил 'Monitoring' в свойство auto, как бы инициализировать его как' false' хотя? – shavit

+1

Да, извините. Вы правы. Возможно, если вы используете C# 6.0, например: 'public int X {get; set;} = x; ' – Marusyk

+1

Я делаю, большое спасибо за подробный ответ! – shavit

1

Не беспокойтесь о производительности. Доступ к свойствам (и должен быть) очень быстрый, и компилятор может их встроить.

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

Больше Джон тарелочкам http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx

Смежные вопросы