Что-то я туплю
От: maxus78  
Дата: 05.03.07 16:25
Оценка:
Здравствуйте, уважаемые коллеги.

Ситуация такая:

namespace WindowsApplication21
{
        class Class1
        {
            public Class2 c2Object;
        }
        class Class2
        {
            public string strValue;
        }

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Class2 c2 = new Class2();
            c2.strValue = "Test";
            Class1 c1 = new Class1();
            c1.c2Object = c2;
            System.Diagnostics.Debug.Write("c1.c2Object.strValue = " + c1.c2Object.strValue + "\n");
            System.Diagnostics.Debug.Write("c2.strValue = " + c2.strValue + "\n");
            c2.strValue = "Non-test";
            System.Diagnostics.Debug.Write("c1.c2Object.strValue = " + c1.c2Object.strValue + "\n");
            System.Diagnostics.Debug.Write("c2.strValue = " + c2.strValue + "\n");
        }
    }
}


Output:

c1.c2Object.strValue = Test
c2.strValue = Test
c1.c2Object.strValue = Non-test
c2.strValue = Non-test

А мне бы не надо, чтобы при изменении свойства в с2 менялось что-то в с1. В смысле, чтобы при присвоении c1.c2Object = c2 в с1 передавалась не ссылка на с2, а либо сам с2, либо копия с2. Понять не могу как это сдлеать. В книжке пишут, что типы, не входящие в CTS, используются по ссылкам. И чего? Как все-таки передать не ссылку, а экземпляр?

Заранее, огромное человеческое спасибо!
Re: Что-то я туплю
От: Terranozavr  
Дата: 05.03.07 16:59
Оценка:
M>А мне бы не надо, чтобы при изменении свойства в с2 менялось что-то в с1. В смысле, чтобы при присвоении c1.c2Object = c2 в с1 передавалась не ссылка на с2, а либо сам с2, либо копия с2. Понять не могу как это сдлеать. В книжке пишут, что типы, не входящие в CTS, используются по ссылкам. И чего? Как все-таки передать не ссылку, а экземпляр?

Либо Class2 сделай структурой, либо определи в нем метод Clone
Re: Что-то я туплю
От: maxus78  
Дата: 05.03.07 17:05
Оценка:
Здравствуйте, maxus78:

Помогла сериализация. Тупо создаю копию объекта.
Re: Что-то я туплю
От: Сокрашт  
Дата: 05.03.07 17:18
Оценка:
Здравствуйте, maxus78, Вы писали:

M>А мне бы не надо, чтобы при изменении свойства в с2 менялось что-то в с1. В смысле, чтобы при присвоении c1.c2Object = c2 в с1 передавалась не ссылка на с2, а либо сам с2, либо копия с2. Понять не могу как это сдлеать. В книжке пишут, что типы, не входящие в CTS, используются по ссылкам. И чего? Как все-таки передать не ссылку, а экземпляр?


Предлагаю использовать стандартный интерфейс ICloneable. Идея примерно такая:
public interface ICloneable
{
   object Clone();
}

Потребуются некоторые модификации в вашем классе:
class Class2 : ICloneable
{
   public string StrValue; //да, public здесь не очень-то, но это для упрощения :)
   public Class2();
   public Class2(string StrValue)
   {this.StrValue = StrValue;)
   
   //Метод для возвращаения копии данного объекта
   public object Clone()
   { return new Class2(this.StrValue);}
}

Использование в программе:
public partial class Form1 : Form
{
    public Form1()
    {
       InitializeComponent();
       Class2 c2 = new Class2("Test");
       Class1 c1 = new Class1();
       c1.c2Object = (Class2)c2.Clone();
       ...
    }

}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.