NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Kopie objektů (předávání parametru odkazem vs hodnotou)

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš "chlastyml" Kacálek:6.3.2017 15:39

Ahoj,

Mám na Vás 2 otázky.

1. Jen bych se chtěl ujistit, zda to chápu dobře. Když volám metodu s argumenty a pokud je argument primitivní datový typ, tak je metodě předán hodnotou a pokud argument není primitivní datový typ, tak je metodě předán odkazem.
viz:

class Program
{
  private static void Main(string[] args)
  {
    int i = 1;
    Change(i);
    Console.WriteLine(i); // Výstup 1

    MyClass myClass = new MyClass(1);
    Change(myClass);
    Console.WriteLine(myClass.Number); // Výstup 11

    Console.ReadKey();
  }

  private static void Change(int i)
  {
    i = i + 10;
  }

  private static void Change(MyClass myClass)
  {
    myClass.Number = myClass.Number + 10;
  }
}

class MyClass
{
  public int Number { get; set; }

  public MyClass(int number)
  {
    Number = number;
  }
}

Jen se chci ujistit. Vím, že existují klíčové slovo ref, které zajistí odkaz i u primitivních dat. typů.

2. Chtěl bych se Vás zeptat, jak řešíte, když musíte dělat hluboké kopie nějakých složitějších instancí?

Díky moc za info ;)

Editováno 6.3.2017 15:40
 
Odpovědět
6.3.2017 15:39
Avatar
termostat
Člen
Avatar
termostat:6.3.2017 16:08

Ahoj,

  1. Je to tak jak píšeš.
  2. Osobně implementuju rozhraní ICloneable a potom v mětodě Clone umístím logiku hlubokého kopírování, viz.

    https://msdn.microsoft.com/…vs.110).aspx

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
6.3.2017 16:08
Avatar
Tomáš "chlastyml" Kacálek:6.3.2017 16:17

Ahoj,
Díky za rychlou reakci a za užitečné informace. ;)

 
Nahoru Odpovědět
6.3.2017 16:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.