C# 访问静态类的非静态成员

C# 访问静态类的非静态成员,c#,class,static,instance,C#,Class,Static,Instance,我有一个静态类,定义如下: public static class Classroom { public string Name; //other members } 如何在另一个类中访问变量Name 因为它是一个静态类,所以我无法创建这样的实例 Classroom ClassroomObj = new Classroom(); 由于名称不是静态的,因此我无法在不创建实例的情况下访问它。那么我如何访问变量呢?您不能在静态类中声明实例成员您还必须使变量静态: publ

我有一个静态类,定义如下:

 public static class Classroom
  {
    public string Name;
    //other members
  }
如何在另一个类中访问变量
Name

因为它是一个静态类,所以我无法创建这样的实例

Classroom ClassroomObj = new Classroom();

由于
名称
不是静态的,因此我无法在不创建实例的情况下访问它。那么我如何访问变量呢?

您不能在静态类中声明实例成员

您还必须使变量
静态

public static class Classroom
{
    public static string Name;
    //other members
}

原因是:可以将静态类视为使用其名称访问的单个实例,而不是使用
new
创建实例并使用变量名称访问它。因此,此静态类中的任何属性也必须具有
static
,以便通过使用类名使其可用

对于
静态类
您可以“创建其实例:

或者将
名称
设置为
静态
(但是,我怀疑您是否需要这种解决方案:这意味着您只有一个
教室
):


您甚至不能在静态类中声明非静态成员。第一段代码无法编译。我认为在这个问题上的否决票有点苛刻。对于新手程序员来说,这似乎是一个合理的问题。OP质疑为什么代码不能编译,所以帮他解决一个问题little@AntP“没有有效的问题可以回答”-是的,有一个,请仔细阅读:“我如何访问变量?”@AntP当用户对某些事情的工作方式感到困惑时,更让他感到困惑的是,如何编写问题的有效/无效问题会加重他的负担。因此,无论它是否有效(我们仍然有不同的观点),我们的目标都是帮助解决实际问题。@tomab在“实际问题”明确提出之前,这个问题的质量很差,因此应该被否决。同样,正如我在一开始所说的,投票是对内容质量的评价,而不是对用户的奖惩。这里唯一的问题是“我不理解静态类”,这也是一个糟糕的问题。试图在狭隘的背景下回答一个广泛的问题实际上无助于任何人,尤其是提问者。否决权和乐于助人并非相互排斥。我怀疑,在问题的上下文中,
教室
应该是
静态的
:这意味着只有一个教室。我回答的前提是OP了解对象和实例如何在
新的
的帮助下工作,但对
静态
感到困惑。上下文没有说明是否应该只有一个实例。这正是为什么回答应该是寻求澄清,而不是发布一个最好可能不合适的答案,最坏可能实际上鼓励误解和坏习惯;)即使问题本身有缺陷,答案也应与所问问题一致。评论中已经有人问OP是否确定他的设计,因为它似乎有缺陷(在最坏的情况下,这只是一个思考的例子,教室是第一个出现在脑海中的有意义的名字,因此与他心目中的静态类的基本思想无关)。因此,如果没有OP的回答和澄清他/她到目前为止没有回答的问题,答案只能基于OP设定的前提。因此,答案没有问题,并且问题是在评论中提出的,因此没有更多问题需要回答do@freshbm这实际上是一个答案,因为请求是不可能实现的。对于“如何在C#中实例化名称空间”这样的问题,您的答案是什么
  public static class MyClass {
    public static String SomeField;
    ....
  }

  // the class is static, no instances are allowed
  var o = new MyClass(); // <- Compile time error! 
  // No static
  public class Classroom
  {
    public string Name;
    ... 
  }

  ...

  Classroom room = new Classroom();
  room.Name = "123";
  public static class Classroom
  {
    // note "static"
    public static string Name;
    ... 
  }

  ...

  Classroom.Name = "123";