如何从静态类返回类实例?

时间:2017-10-18 17:30:44

标签: c#

我想使用一个必须包含全局变量的静态类,所以我只需从变量中访问所有应用程序控件。 其实我有这个实现:

public static class Globals
{
    public static HeadToHead Head2Head
    {
       get { return Resources.Controls.HeadToHead; }
    }
}

在上面的例子中,我想返回HeadToHead控件的实例,控件看起来像这样:

public partial class HeadToHead : UserControl
{
    public static int HomeId = 0;

}

我的目标是访问此控件的静态变量,例如:Globals.Head2Head.HomeId

但是我在这一行上收到了这个错误:get { return Resources.Controls.HeadToHead; }

  

HeadToHead是一种在给定上下文中无效的类型

2 个答案:

答案 0 :(得分:0)

您正在从似乎声明该类型实例的属性返回看起来像类型的内容。如果你真的想要返回那个类型,那就有它的语法(我不记得了,我认为在c#中它是classname.type)。如果要返回实例,则需要从某个地方获取该实例。

另外,UI控件的静态实例是一个坏主意和代码味道。

答案 1 :(得分:0)

您必须实例化该类型的实例并返回该实例。如您所希望的那样,您可以使用静态构造函数。

public static class Globals {

    static Globals(){
       Head2Head = new Resources.Controls.HeadToHead();
    }

    public static HeadToHead Head2Head { get; private set; }
}

在某些情况下,您实际上想要这样做,但在应用程序的生命周期中不会发生变化的常见静态设置可能就是其中之一。由于HeadToHead继承自UserControl,但实际上并非如此,UserControl的实例理想情况下应该永远不会是静态的。