为什么我的值不在类型的实例之间保存?

时间:2012-03-15 07:30:36

标签: c# asp.net

我有课:

public class pro {
    private string url = string.Empty;
    public string GetURL() { return url; }
    public void SetURL(string value) { url = value; }
}

在这一行中我获得了价值:

string url = li1.Value;  

pro itm = new pro();  // I have create Proprtie so I'm calling that

itm.SetURL(url); // here I'm setting value

然后:

pro itm = new pro(); //properties object I have created

string url = itm.GetURL(); // I'm not getting value which I have set in first 

类。

我也创造了属性;我做错了什么?

3 个答案:

答案 0 :(得分:3)

每个类实例(即每个new pro())都有不同的实例值;例如,如果您有2个不同的实例,则完全可以预期它们不会共享URL。如果您要分享此内容,则应通过传递pro来使两个地方都可以使用相同的 pro实例。

顺便提一下,GetURL() / SetURL()不是惯用的C# - 拥有属性更为常见,即

public string Url {get;set;}

然后您将访问:

YourType item = new YourType();
item.Url = "http://foo.com/bar/";
// ... 
string url = item.Url;

从评论中,听起来就像你在谈论static数据一样;我应该强调,使用static通常不是一个好主意,并且可能导致测试,多租户,线程等方面的许多问题;但是:以下工作没有任何实例:

public class Properties {
    public static string Url {get;set;}
}
...
Properties.Url = "http://foo.com/bar/";
...
string url = Properties.Url;

注意:根本没有实例。

但是,几乎总是优先保持实例可用,并对该公共实例使用实例属性。

答案 1 :(得分:3)

我可能理解你的问题:

问题是,在第二个中,您创建了pro类的实例。如果您想访问第一个类中设置的字符串值,则应使用该第一个pro对象。

如果不是您的问题,请澄清。

答案 2 :(得分:0)

如果你需要一些像应用程序属性这样的类,你可以使用静态类。

public static class pro
{
  public static string Url {get; set;}
}

并像pro.Url = "aa"一样使用它;