这个C#控制台代码正确吗?

这个C#控制台代码正确吗?,c#,C#,诚然,我对C#/OOP缺乏经验,但我最近遇到了这段代码,我觉得这段代码不正确,尽管它在功能上确实有效。代码来自控制台应用程序 namespace ConsoleApp { class Program { static private double Theta{ get; set; } static void Main(string[] args) { ... var thetaString = Console.ReadLine();

诚然,我对C#/OOP缺乏经验,但我最近遇到了这段代码,我觉得这段代码不正确,尽管它在功能上确实有效。代码来自控制台应用程序

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},它的功能与以前一样。这段代码在做什么?访问器的意义是什么

如果我从Theta中删除静态声明,它将不再编译

这是因为您试图从静态方法访问实例属性。您需要创建
程序
的实例来访问非静态属性

访问器的意义是什么

它们允许您定义获取/设置值的方法,而不仅仅是存储值的字段。还有其他更微妙的区别,其中大部分都被描述了。在我的选择中,最重要的是:

  • 将字段更改为属性是一项突破性的更改-必须针对新程序集重新生成客户端才能合并更改。将自动实现的属性更改为具有实际代码的属性不是破坏性的更改
  • 大多数数据绑定方法使用反射,只支持绑定到属性

它是否按预期工作?如果是的话,它是正确的,否则它不是。为什么你觉得这是不正确的?你认为应该是什么?静态函数不能访问实例变量、属性等。代码按它所说的那样运行,然后就正确了。案件结案。