Свойства имеют свою ценность - PullRequest
2 голосов
/ 05 декабря 2011

Если я создаю новый класс, и в этом классе я помещаю свойство следующим образом:

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 ]

5 голосов
/ 05 декабря 2011

Нет, это не содержит значений таким образом, не более, чем установка имени одного пользователя в «Гейзенбург» влияет на мое имя «Энтони Пеграм».Каждый экземпляр класса - это отдельный объект, а свойства экземпляра и члены одного экземпляра не переносятся на другие экземпляры.

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

Если вам нужно предоставить общий доступ к свойствам, где какое-то другое место видит то же значениеВы устанавливаете в другом месте, вам нужно либо поделиться экземпляром , либо сделать сами данные shared с помощью ключевого слова static в свойстве.

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

При использовании статики состояние становится global и не привязано к конкретному экземпляру . Фактически, он не нуждается в экземпляре.Вы бы просто получили к нему доступ через имя класса напрямую, а не через объект этого класса.

Foo.Bar = "Blah"; // no instance necessary
string data = Foo.Bar;
4 голосов
/ 05 декабря 2011

Вам нужно получить и установить в одном экземпляре переменной.
Если вам нужен класс global , вы можете создать класс singleton (см. в этом примере)

3 голосов
/ 05 декабря 2011

Два разных экземпляра будут иметь два разных значения свойства. Когда вы создаете новый экземпляр, вы создаете совершенно новый объект со своим собственным свойством CurrentDirectory.

Если по какой-то причине вы пытаетесь создать копию объекта, который у вас уже есть, изучите клонирование.

3 голосов
/ 05 декабря 2011

Нет, это не будет возвращать значение, которое вы установили ранее, так как это свойство зависит от экземпляра. Если вы хотите, чтобы свойство было доступно всем экземплярам, ​​вам нужно сделать его static.

2 голосов
/ 05 декабря 2011

Нет.

Это новый объект, который будет иметь значения по умолчанию для нового объекта.В этом случае ничего не будет.

1 голос
/ 05 декабря 2011

Ваш новый экземпляр, как указывает слово, новый экземпляр , поэтому значение, которое вы установили ранее, будет сохранено для другого экземпляра (myCurrentDirectory), myCurrentDirectory1 является объектом того же типасо своими собственными ценностями.Вам нужно установить и получить значения для одного экземпляра в этом случае.

Если вы установите myCurrentDirectory1=myCurrentDirectory;, то оба будут содержать одинаковые значения, поскольку они действительно являются указателями на одно и то же место в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...