c#:(静态)类级变量

时间:2010-10-01 13:16:21

标签: c# static declaration

这绝对是一个菜鸟问题,但我的搜索远远没有解决这个问题。

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

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

我对静态对象的理解是它们的值在对象的所有实例之间共享。在正常操作下,我希望它们只是我应用程序的一个实例,所以这个问题不是问题 - 但它强调了我对相当基本的东西缺乏了解。

在我的日志记录对象的情况下,我可以看到使其成为静态的情况 - 在多个实例之间共享日志可能是一个好处。但是,情况可能并非如此......对于我的int,我当然不希望在实例之间共享它。

因此...

  • 我是否误解了这背后的理论?
  • 我应该以不同的方式声明和使用我的类级变量吗?
  • 我应该避免使用它们吗?我可以简单地将值作为参数从函数传递给函数,尽管对于没有明显增益的工作似乎没什么用。
编辑:好的,信息很明确 - 我对静力学的理解基本上是正确的,但问题在于结构和方法。谢谢你的回复。

3 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:3)

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

EG

class MyConsoleApp
{
    public static void Main()
    {
        MyClass mc = new MyClass();
    }
}

Class MyClass
{
   private MyLog lol as new MyLog();
   private int myInt = 0;
}

答案 2 :(得分:2)

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

这里的理论并不多,只有务实的要求......

托马斯