Здравствуйте, уважаемые коллеги.
Ситуация такая:
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, используются по ссылкам. И чего? Как все-таки передать не ссылку, а экземпляр?
Заранее, огромное человеческое спасибо!
Здравствуйте, 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();
...
}
}