从一个类访问数据到其他c#

时间:2017-01-17 14:00:03

标签: c#

我有一个与wcf对话的课程

public class Network
{
    private const string PROXY_HOSTNAME_PARAM = "ProxyHostname";        
    public string GetMyNetwork()
    {
        MyProxy myprox = MyProxy.Instance;
        string network = string.Empty;
        network = myprox .GetNetworkConfig(); 
        return network;
    }

现在我有另一个类,我创建类Network的对象并调用GetMyNetwork()来获取网络。 当我这样做它再次击中wcf并给我字符串。我想要避免这种情况。我希望它一劳永逸地缓存网络字符串,每当我点击这种方法时,我都应该获得数据,而不必再次点击wcf。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:1)

public class Network
{
    private const string PROXY_HOSTNAME_PARAM = "ProxyHostname";    
    private string network = String.Empty;  
    private Network _instance; 
    public string GetMyNetwork()
    {
        if (String.IsNullOrWhiteSpace(network))
        {
           MyProxy myprox = MyProxy.Instance;
           network = myprox .GetNetworkConfig(); 
        }
        return network;
    }
    private Network() { }
    public Network Instance
    {
       get
       {
          if (this._instance == null)
          {
              this._instance = new Network();
          }
          return this._instance;
       }
    }     
}

确保只维护Network类的一个实例。每次创建Network类的新实例时,内部网络变量将是一个空字符串,因此调用GetMyNetwork方法将再次调用WCF服务。

答案 1 :(得分:1)

您需要设置类和函数(或属性)static

public static MyClass
{
    public static string MyFunc()
    {
        return "hello";
    }
}

使用

string myString = MyClass.MyFunc();

答案 2 :(得分:1)

您可以从Network班级制作单身人士:

public class Network
{
    static Network _instance;

    public static Network Instance
    {
         get { return _instance ?? (_instance = new Network()); }
    }

    string _networkString;

    private Network() { _networkString = string.Empty; }

    public string GetMyNetwork()
    {
        if(string.IsNullOrEmpty(_networkString))
            return (_networkString = MyProxy.Instance.GetNetworkConfig());

        return _networkString;
    }
}

现在,您可以像使用MyProxy对象一样使用它:

string network = Network.Instance.GetMyNetwork();