繁体   English   中英

从一个方法调用返回单例

[英]Returning a singleton from one method call

我有这个课:

public static class GameControl
{
   public static DNControl GetDayNightControl()
   {
      return DNControl.Instance;
   }

   public static MapHandler GetMapHandler()
   {
      return MapHandler.Instance;
   }

   public static TemperatureControl GetTemperatureControl()
   {
      return TemperatureControl.Instance;
   }
}

所有的返回类型都是Singletons。你们中的任何一个都可以给我一个主意,我如何用一个单一的方法返回它们中的任何一个?

创建一个包装器类,然后返回它。

public class WrapperClass
{
    public DNControl DayNightControl {get; internal set;}
    public MapHandler MapHandler {get; internal set;}
    public TemperatureControl TemperatureControl {get; internal set;}
}

public static class GameControl
{
    public static WrapperClass GetEverything()
    {
        var wrapper = new WrapperClass();

        wrapper.DayNightControl = DNControl.Instance;
        wrapper.MapHandler = MapHandler.Instance;
        wrapper.TemperatureControl = TemperatureControl.Instance;

        return wrapper;
    }

    // if that's still pertinent you may keep your individual methods too
}

不过,我应该提到:我真的看不出将这些内容结合在一起的意义。 在这里可能看不到更大的图片,但是在我看来,您能够从静态类中调用单个单例的实际方式是可以的。 您可能会从中获得更多期望增加值的详细信息,从而受益。

您可以使用泛型,例如

public static T GetControl<T>()
{
    // determine what type to return based on T, and return it
}

我没有尝试过,但是从我的头顶上,我认为类似的事情应该起作用。

您可以通过反射尝试这样的操作

public static class GameControl
{

    public static T GetControl<T>()
    {
        return (T)typeof(T).GetProperty("Instance").GetValue(null);
    }

}

不清楚您要问的是什么,但是在一种方法调用中返回所有内容的一种方法是

public static class GameControl
{

    public static void GetSingletons(out DNControl dnControl, out MapHandler mapHandler, out TemperatureControl tc)
    {
        dnControl = DNControl.Instance;
        mapHandler = MapHandler.Instance;
        tc = TemperatureControl.Instance;
        return;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM