c# - 如何在初始化静态类之前初始化静态属性?

标签 c# static

Class2 下面有一个属性需要在调用 GetSomething 之前设置,但是因为我在 的顶部访问 Class2 >Class1 该属性在到达 Something 类时始终为 null。我似乎无法弄清楚如何更改我的代码以在使用之前设置该属性。有人吗?

编辑 我想从 form1 的构造函数传递依赖关系,而不是将其硬编码到链上。

public partial class form1
{
    private static readonly ISomeConstructedClass someConstructedClass = Class1.SomeConstructedClass;
    public form1()
    {
        someConstructedClass.SomeDependency = new SomeDependency();
        someConstructedClass.Whatever();
    }
}
public static class Class1
{
    public static readonly ISomething something = (ISomething)Class2.GetSomething("something");
    public static ISomeConstructedClass SomeConstructedClass
    {
     get
     {
       return something.SomeConstructedClass;
     }
    }

} ....

public class Class2
{   
    public static ISomeDependency SomeDependency
    {
       get;
       set;
    }
    public static GetSomething(string something)
    {
         switch(something)
         {
            case "something":
               return new Something( SomeDependency );
         }         
    }
}

  public class Something : ISomething
  {
      public ISomeDependency SomeDependency
      {
           get;
           set;
      }
      public Something(ISomeDependency someDependency)
      {
           SomeDependency = someDependency;
      }
  }

最佳答案

[重新]编辑:

我对您之前尝试做的事情感到困惑,您只需要先创建依赖项即可。

public partial class form1
{
    private static /*readonly*/ ISomeConstructedClass someConstructedClass;
    public form1()
    {
        Class2.SomeDependency = new SomeDependency();
        someConstructedClass = Class1.SomeConstructedClass;
        someConstructedClass.Whatever();
    }
}

我还会将某些内容的创建移动到属性中,以确保它不会过早初始化(在调用 form1 构造函数之前)。

public static class Class1
{
    public static ISomething something;
    public static ISomeConstructedClass SomeConstructedClass
    {
        get
        {
            if (something == null) {
                something = (ISomething)Class2.GetSomething("something");
            }
            return something.SomeConstructedClass;
        }
    }
}

您可以使用 static constructor .这在调用/访问任何静态(或与此相关的实例)字段或方法之前被调用。

类似于:

static Class2() {
    SomeDependency = SomeDependencyYouNeed;
}

关于c# - 如何在初始化静态类之前初始化静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17623752/

相关文章:

JAVA - 无法对非静态方法进行静态引用

java - 如何将枚举干净地链接到类中的静态信息?

c# - 如果C#中的指针不继承自object,那还是只有object吗?

javascript - 如何在 CRM 2016 服务器端检索附加到表单的 Javascript 事件名称

c# - 在 C# 中针对类的特定字段禁用/抑制警告 CS0649

Java内存泄漏理解

java - 如何使用静态方法设计类

c# - 如何使用 .NET 客户端以编程方式删除托管在 couchbase 中的数据库存储桶中的所有数据

c# - 在 ASP.NET 中的两点之间绘制箭头

Java 不知道从哪里开始使用这个方法来获取元素周期表