在任何地方访问非静态类的属性

时间:2016-05-04 10:18:28

标签: c# static locking

我今天带着一个奇怪的问题来到这里。 有没有办法可以使用非静态类,如静态?

即: 我们有以下课程:

public class Parameters
{
    public String LoadType { get; set; }
    public Parameters (String inLoadType)
    {
          LoadType = inLoadType;
    }
}

public class MainClass
{
    public Parameters Parameters { get; set; }

    public MainClass(String inLoadType)
    {
        Parameters = new Parameters(inLoadType);
    }
}

现在我们实例化MainClass,然后在另一个不是我想要访问LoadType的MainClass的地方。

它应该是threadSafe,操作也需要很长时间,这就是我不能简单地使用锁并使其静止的原因。

我想要访问该变量的类是静态的,我想在Parameters类中使用静态Event的变通方法,并且调用该事件的任何人都将获得实例化类的值或类似的东西。 关于它的任何其他想法旁边作为参数传递给我需要的静态方法?

听起来像是一个愚蠢的问题,但我只是想知道是否可能。

1 个答案:

答案 0 :(得分:1)

想象一下,您有两个 Parameters个实例

  Parameters one = new Parameters("One");
  Parameters two = new Parameters("Two");

然后你打电话:

  String result = SomeWeirdBlackMagicCallOfLoadType();

预期结果是什么? "One""Two"?为了解决这个问题 问题,您可以将Parameters变成单曲(仅限一个实例),因此调用将是

  String result = Parameters.Instance.LoadType;

但是,如果数据不依赖于实例,我建议将static视为static。如果是操作,线程安全,您可以使用专为此设计的Lazy<String>

  public class Parameters {
    private static Lazy<String> s_LoadType = new Lazy<string>(() => {
      ....
      return "bla-bla-bla";
    });

    public static String LoadType {
      get {
        return s_LoadType.Value;
      }
    }
    ... 
  }