Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Передача параметров TreeNode и XmlNode


Автор: DoKZ 6.11.2013, 18:35
Я, по большей части, программист C++ и Delphi.

Сейчас активно занялся C#, поэтому следующий вопрос для меня остаётся непонятным.

Предположим следующий код. Изменение вытащенного из XmlDocument'а XmlNode'а влияет на документ:

Код

// Класс

using namespace Tools.Subclass
{
  class OverXmlNode
  {
    private XmlNode xml;
    
    public XmlNode XML
    {get {...} set {...} }

    private OverXmlNode(XmlNode param)
    {
      // Как я понимаю, в param передаётся копия (раз нет ref) 
      // объекта XmlNode и xml присваивается этой копии.
      xml = param;
    }
  }
}

// Рабочий код

XmlDocument doc;
XmlNode node = doc.ChooseSingleNode(xp);
OverXmlNode overNode = new OverXmlNode(node);
overNode.XML.AppendChild(smth); // или еще что-либо
// XmlDocument doc поменялся, выбранный через 
// XPath элемент изменился. Почему? Ведь мы передавали не 
// ссылку, а копию объекта.


И второй случай:

Код

// Предположим, на форме есть TreeView.

TreeNode node = treeView1.Nodes[0];
node.Tag = 5;

MessageBox.Show(treeView1.Nodes[0].Tag);
// Опять-таки, значение Node поменялось в TreeView, 
// хотя TreeNode node = treeView1.Nodes[0] должно (по крайней мере, 
// в других языках) означать копирование.


Если написать следующий код:
Код

int a = 5;
int b = a;
b = b + 5;


a останется неизменным, верно?
Так в чем разница и когда можно использовать такой странный способ изменения объектов, а когда нет? И как это работает, передаются указатели или что?

Заранее спасибо  smile 

Автор: infarch 7.11.2013, 10:29
Почитайте вот тут http://msdn.microsoft.com/en-us/library/3ewxz6et.aspx про типы данных. Особенно про ссылочные и значения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)