2015-03-02 2 views
-4

Я, по общему признанию, неопытен с C#/OOP, но недавно я натолкнулся на этот код, и он чувствует себя некорректным для меня, хотя он, похоже, работает нормально. Код из консольного приложения.Правильно ли это код консоли C#?

namespace ConsoleApp 
{ 
    class Program 
    { 
    static private double Theta{ get; set; } 

    static void Main(string[] args) 
    { 
     ... 
     var thetaString = Console.ReadLine(); 
     if (!String.IsNullOrEmpty(thetaString)) 
     Theta = Math.PI * Double.Parse(thetaString)/180.0; 
     ... 
    } 
    } 
} 

Если я удалю статическую декларацию из Theta, она больше не будет компилироваться. Если я удалю {get; set}, он функционирует так же, как и ранее. Что делает этот код? Каково значение аксессуаров?

+0

Работает ли он так, как ожидалось? Если это так - это правильно, иначе это не так. – zerkms

+0

Почему вы думаете, что это неправильно? Как вы думаете, что это должно быть? – Servy

+1

Статические функции не могут получить доступ к переменным экземпляра, свойствам и т. Д. – adt

ответ

1

Если удалить статическую декларацию от Theta, он больше не будет компилировать

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

Каково значение аксессуаров?

Они позволяют вам определить методы, которые получают/заданные значения, а не только поле, которое хранит значение. Существуют и другие более тонкие отличия, большинство из которых описаны here. В моем варианте наиболее значимыми являются:

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