c#::(静态)类级变量

c#::(静态)类级变量,c#,static,declaration,C#,Static,Declaration,这肯定是一个有点不对劲的问题,但我的搜索远远没有为我解决这个问题 A希望一个特定的控制台应用程序存储多个类级变量。在一种情况下,我想存储我的日志对象的副本,我将在类中的不同位置使用它。在另一种情况下,我想存储一个简单类型,实际上是一个int值,它只在内部使用(不需要是属性) 看来,除非我将这些变量指定为静态变量,否则我无法在Main()及更高版本中使用它们 我对静态对象的理解是,它们的值在对象的所有实例中共享。在正常运行的情况下,我希望他们只是我应用程序的一个实例,所以这个问题不是问题——但它突

这肯定是一个有点不对劲的问题,但我的搜索远远没有为我解决这个问题

A希望一个特定的控制台应用程序存储多个类级变量。在一种情况下,我想存储我的日志对象的副本,我将在类中的不同位置使用它。在另一种情况下,我想存储一个简单类型,实际上是一个int值,它只在内部使用(不需要是属性)

看来,除非我将这些变量指定为静态变量,否则我无法在Main()及更高版本中使用它们

我对静态对象的理解是,它们的值在对象的所有实例中共享。在正常运行的情况下,我希望他们只是我应用程序的一个实例,所以这个问题不是问题——但它突出了我对一些相当基本的东西缺乏理解

在我的logging对象的例子中,我可以看到一个使其成为静态的例子——跨多个实例共享日志可能是一个好处。然而,情况可能并非如此。。。对于我的int,我当然不希望在实例之间共享它

所以

  • 我是否误解了这背后的理论
  • 我是否应该以不同的方式声明和使用类级变量
  • 我应该避免使用它们吗?我可以简单地将值作为参数从一个函数传递到另一个函数,尽管这似乎并没有什么明显的好处

编辑:好的,信息很清楚——我对静力学的理解基本上是正确的,但问题在于结构和方法。感谢您的回复。

您应该在Main函数之外创建一个类,然后在Main函数中创建该类的实例

乙二醇


只需将您的应用程序封装在另一个类中,您可以在
Main
方法上创建并执行该类:

class MyApp {
  private MyLog lol = new MyLog(); 
  private int myInt = 0;

  public void Execute() {
    // ...
  }
}

class Program {
  public static void Main() {
    new MyApp().Execute();
  }
}

如果需要,您仍然可以将日志字段设置为静态。

这里的问题或多或少是纯粹的语法问题:因为静态方法只能访问静态字段,而
Main()
方法必须是静态的,这就要求使用的变量是静态的。您从未创建MyConsoleApp类的实例

这里没有太多的理论,只有务实的要求


Thomas

答案不准确,但请检查:Main()方法是静态的,这就是为什么您只能从中访问静态方法和变量。静态变量在AppDomain中的所有对象实例中共享。您的应用程序的每个实例都位于不同的AppDomain中。@Douglas-这是一个重要的澄清-谢谢。+1,并且很好地解释了为什么值得费劲。
class MyApp {
  private MyLog lol = new MyLog(); 
  private int myInt = 0;

  public void Execute() {
    // ...
  }
}

class Program {
  public static void Main() {
    new MyApp().Execute();
  }
}