【问题标题】:Accessing Static Members of Static Members访问静态成员的静态成员
【发布时间】:2017-04-11 14:33:32
【问题描述】:

考虑以下类

class A
{
public static int i;
}

class B
{
public static A a{get;}=new A();  // without new A(), B.A will be null
}

现在,

B.a 给出了 A 的一个新实例,由于 A 类的变量“i”是静态的,我无法通过 B.a 访问“i”,即 B.a.i 正在编译时间错误。

我明白,如果我喜欢下面的内容,

class B
{
  static class A
  {
    static int i;
   }
}

那我可以做 B.A.i.

所以我的问题是如何访问类的静态成员的静态成员?有没有可能,还有其他我可以使用的模式。

另请注意,将“A”类设为静态并将“B”类设为

class B
{
public static A a{get;}
}

给出“静态类型不能用作返回类型”的编译时错误。

【问题讨论】:

  • 如果你想得到 i,就做 A.i. B 在这里有什么意义?
  • 我知道。只是想知道这是否可能。尝试实际学习模式。

标签: c# static


【解决方案1】:

由于iA 的静态成员,您可以直接访问它

class B
{
  public static A a {get;} = new A();  
  public int ii{get;} = A.i; 
}  

【讨论】:

  • 漂亮的图案。我想不出来。但是为什么不允许返回静态类型呢?
  • @dividedbyzero,与发布的答案相同。
  • 但是如果 A 是静态的,我们不能返回 A。
【解决方案2】:

如何访问类的静态成员的静态成员?

如果某物是类的成员——静态或非静态——这意味着它要么是值,要么是对某物的实例的引用。因此,如果您知道您有一个类的实例,但该类本身具有静态成员,那么只需静态访问这些成员:

class MyClass
{
    public static string Value { get; }
}

string x = MyClass.Value;

【讨论】:

  • "如果你知道你有一个类的实例,但该类本身有静态成员,那么只需静态访问这些成员"如何通过类的实例访问静态成员??跨度>
  • 你不...你只是通过类本身来访问它,就像我的例子一样。
  • 我明白这一点。我的问题是通过 B 访问 i。
【解决方案3】:

您不需要实例化一个类来访问它的静态成员。 你可以试试:

int value = A.i;

如果你需要,你也可以添加一个静态类:

public static class A
{
public static int i;
}

您可以在代码中的任何位置使用,例如:

int value = A.i;

【讨论】:

  • 我希望通过 B 类访问 A.i。
  • B 类{ int value = A.i; }
  • 技术不错。但我担心的是,每次 A 中的属性增加时,也需要在 B 中添加一行代码。
  • 如果我没理解错的话,你只需要这个class B { A.i++;}
  • 或者你可以在类b中创建一个方法来增加A:classe B{ void increaseA{ A.i++;}}
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多