objekti in prenos po referenci

Načeloma naj bi bil prenos objekta preko metode po referenci, ne? Torej, če jz dam vrednostni tip od objekta v metodi kot parameter, naj bi se vrednost  v tem  objektom spremenile in obdržale, ko se klic metode konča. Ali se motim? Zakaj mi potem, ko dam vrednost od objekta v metodo ne spremeni? Torej se vrednost v objektu ohrani v staro vrednost, torej se naredi kopija te vrednosti....

Primer:
namespace ReferenceTest
{
    class Person
    {
        public int x = 10;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            ChangeData(p.x);//spremeni vrednost
            //izpise 10, ne 20
            Console.WriteLine("Stevilo je:{0}",p.x);
            Console.Read();
           
        }

        private static void ChangeData(int p)
        {
            p = 20;
        }
    }
}


























Avtor: bojanv, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

bojanv
bojanv - sreda, 02. avgust 2006

Vrednostne tipe znam prenašat. Mislil sem, da je kaka finta, ker prenašam vrednost od objekta, torej p.x, da se to potem tudi prenese po referenci. Zdaj mi je jasno.... Thnx, Damir...

ExAmigan
ExAmigan - sreda, 02. avgust 2006

Parameter metode ChangeData je int, ki je vrednosten. Pri tem ni bistveno to, da gre za člana referenčnega razreda.   Želeno boš dosegel, če parameter preneseš po referenci:   private static void ChangeData(ref int p)   ali pa seveda, če preneseš referenčni tip:   private static void ChangeData(Person p)