Zachowanie referencji i użycie w innej metodzie.

0

Witam, mam taki poniższy kod:

Klasa A:

public class test
    {
        public string nowe;
        public int costam;
    } 

Klasa B:

public class TestKlasy
    {
        private test zmienna;

        public TestKlasy(test now)
        {
            zmienna = now;
        }

        public void Wykonaj()
        {
            zmienna = new test();
        }
    } 

Następnie w Mainie:

class Program
    {
        static test oryginal = null;
        static void Main(string[] args)
        {
            TestKlasy nowy = new Executor(oryginal);
            nowy.Wykonaj();

        }
    } 

Chciałbym aby stworzenie nowej instancji wewnątrz metody Wykonaj klasy TestKlasy wpłynęło na to aby zmienna oryginal w klasie Program również była ustawiona.

0
 public TestKlasy(ref test now)
{
  now = new test();
}

...
test now;
TestKlasy tk = new TestKlasy(ref now);
0
Azarien napisał(a):
 public TestKlasy(ref test now)
{
  now = new test();
}

...
test now;
TestKlasy tk = new TestKlasy(ref now);

jemu chodzi o to żeby zachować referencję na potem a potem ją zmienić w innej metodzie
IMO się nie da bez użycia unsafe kodu i wskaźników
W normalnym kodzie obiektowym raczej nie używa się "ref" tylko zmienia konkretną wartość obiektu

coś w stylu:

Klasa A:

public class test
    {
        public string nowe;
        public int costam;
    } 

public class testHolder
    {
        public test instancja_test;
    }


public class TestKlasy
    {
        private testHolder zmienna;
 
        public TestKlasy(testHolder now)
        {
            zmienna = now;
        }
 
        public void Wykonaj()
        {
            zmienna.instancja_test = new test();
        }
    } 


class Program
    {
        static testHolder oryginal = new testHolder();
        static void Main(string[] args)
        {
            TestKlasy nowy = new Executor(oryginal);
            nowy.Wykonaj();
 
        }
    } 
0

update: w przypadku zapamiętania wskaźnika trzeba pamiętać o tym że środowisko może przemieszczać obiekty po pamięci w trakcie trwania programu, obiekt trzeba "przypiąć"
można użyć TypedReference i __makeref ale nadal wkraczasz tutaj w nieciekawe, nieustandaryzowane rejony języka których nie powinno się dotykać

0

ogólnie cały pomysł jest poroniony - nie powinno się tworzyć metod z efektami ubocznymi, tzn. takich które mają wpływ na zmienne poza swoimi własnymi wewnątrz klasy

kod w miarę możliwości powinien być sprowadzony do postaci

public class test
    {
        public string nowe;
        public int costam;
    } 

public class TestKlasy
    {
        public test Wykonaj()
        {
            return new test();
        }
    } 


class Program
    {
        static test oryginal;
        static void Main(string[] args)
        {
            TestKlasy nowy = new Executor();
            test = nowy.Wykonaj();
        }
    } 

1 użytkowników online, w tym zalogowanych: 0, gości: 1