.comment-link {margin-left:.6em;}

Wednesday, February 23, 2005


Passing a value Type ByVal Tricky Question ?

this is a small tricky question : ( Very IMP )

what is the Console.WriteLine  going to print ?

public class Reference                       public struct Value

{                                                        {

    public int i;                                            public int i;              //Not Private

    public int Prop                                       public int Prop

        {                                                            {

        get  {return i;}                                          get  {return i;}

        set  {i = value;}                                        set  {i = value;}

        }                                                            }

}                                                        }




    private Reference_r; // Reference type

    private Value_v; // Value type

    public Example()


        _r = new Reference();

        _v = new Value();


    public Reference RefProp


    get  {return _r;}

    set  {_r = value;}


    public Value ValueProp


    get  {return _v;}

    set  {_v = value; }



class Program


    static void Main(string[] args)


        Example e = new Example();

        e.ValueProp.i = 4;

          Console.WriteLine(e.ValueProp.i);  // what is going to be printed after this line ?



take care of the line :  e.ValueProp.i = 4;

let's divide this line , e.ValueProp is going to return an instance of the Value Struct , then we go ahead and change the "i" field on this struct

so first part is getting the Value instance from the ValueProp :  

Value v1 = e.ValueProp;         //is V1 is going to take a copy of the returned Value instance or going to reference this instance ?

                                                   // of course it is going to take a copy . coz this is a value type byVal assignment


v1.i = 4;                                       //is going to change the "i" field on the copied Instance not the original . so the Console.WriteLine should Print 0

                                                    // but the Compiler detects this issue and throw a compile error .


Fantastic Entry . this means that .NET still lack the feature of getting reference or a clone to any type either it is a reference or a value type.
Post a Comment

Links to this post:

Create a Link

<< Home

This page is powered by Blogger. Isn't yours?