财产是否具有价值

时间:2011-12-05 18:04:37

标签: c# class properties

如果我创建一个新类,并且在这个类中我放了一个这样的属性:

public class CurrentDirectory
{
    private string cd;

    public string CurrentDirectory
    {
        get
        {
            return cd;
        }
        set
        {
            cd = value;
        }
    }

然后,我在我的程序中的某一点,创建了这个类的新实例,如下所示:

CurrentDirectory myCurrentDirectory = New CurrentDirectory();

然后我将一个值设置为CurrentDirectory,如下所示:

myCurrentDirectory.CurrentDirectory = @"C:\MyFiles\Here";

然后,在我的程序的另一个点上,我创建了另一个CurrentDirectory实例,并像这样“获取”CurrentDirectory的值:

CurrentDirectory myCurrentDirectory1 = new CurrentDirectory();
string putFilesHere = myCurrentDirectory1.CurrentDirectory;

这会返回我之前设置的值,还是需要在同一个实例中“获取”并“设置”我的值?

由于

6 个答案:

答案 0 :(得分:5)

不,这不会以这种方式保存值,仅仅将一个用户的名称设置为“Heisenburg”会影响我的名字“Anthony Pegram”。该类的每个实例都是一个不同的对象,实例属性和一个实例的成员不会转移到其他实例。

User user = new User(); // this is my object!
user.Name = "Anthony Pegram"; // this is my name! 

User otherUser = new User(); // this is your object!
otherUser.Name = "Heisenburg"; // this is your name! 

// my object is not your object

如果您需要将属性共享到其他地方看到您在其他位置设置的相同值的位置,则需要共享实例,或者使数据本身共享通过该媒体资源上的static关键字。

class Foo
{
    public static string Bar { get; set; }
}

如果使用静态,则状态变为全局,并且不依赖于特定的实例。事实上,它不需要实例。您只需通过类名直接访问它,而不是通过该类的对象访问它。

Foo.Bar = "Blah"; // no instance necessary
string data = Foo.Bar;

答案 1 :(得分:4)

您需要在相同的变量实例中获取和设置 如果您需要全局类,则可以创建singleton类(请参阅this example

答案 2 :(得分:3)

否则不会返回您之前设置的值,因为该属性是特定于实例的。 如果您希望所有实例共享一个属性,那么您需要将其设为static

答案 3 :(得分:3)

两个不同的实例将具有两个不同的属性值。在创建新实例时,您将使用自己的CurrentDirectory属性创建一个全新的对象。

如果您因某种原因尝试创建已有对象的副本,请查看克隆。

答案 4 :(得分:2)

没有

这是一个新对象,具有新对象的默认值。在这种情况下,它什么都不会。

答案 5 :(得分:1)

您的新实例,正如单词所示,是新实例因此,您之前设置的值将保留给另一个实例(myCurrentDirectory),myCurrentDirectory1是一个对象具有自己值的相同类型。在这种情况下,您需要在同一个实例上设置和获取值。

如果设置myCurrentDirectory1=myCurrentDirectory;,则两者都将保持相同的值,因为它们实际上是指向内存中相同位置的指针。