Make a reference to another string in C#

前端 未结 5 759
夕颜
夕颜 2021-01-19 22:25

As far as I know a string in C# is a reference type.

So in the following code \'a\' should be equal to \"Hi\", but it still keeps its value which is \"Hello\". Why?<

5条回答
  •  走了就别回头了
    2021-01-19 22:36

    A number of the answers point out that strings are immutable; though that is true, it is completely irrelevant to your question.

    What is more relevant is that you are misunderstanding how references work with respect to variables. A reference is not a reference to a variable. Think of a reference as a piece of string. You start with this:

    a----------------------Hello
    

    Then you say that "b = a", which means attach another piece of string to the same thing that a is attached to:

    a----------------------Hello
                          /
    b---------------------
    

    Then you say "now attach b to Hi"

    a----------------------Hello
    
    b----------------------Hi
    

    You are thinking either that references work like this:

    a----------------------Hello
    

    Then I say that b is another name for a:

    a/b ----------------------Hello
    

    Then I change b, which changes a, because they are two names for the same thing:

    a/b ----------------------Hi
    

    Or perhaps you are thinking that references work like this:

    a----------------------Hello
    

    Then I say that b refers to a:

    b -------------- a ----------------------Hello
    

    Then I change b, which indirectly changes a:

    b -------------- a ----------------------Hi
    

    That is, you are expecting to make a reference to a variable, instead of a value. You can do that in C#, like this:

    void M(ref int x)
    {
        x = 1;
    }
    ...
    int y = 0;
    M(ref y);
    

    That means "for the duration of the call to M, x is another name for y". A change to x changes y because they are the same variable. Notice that the type of the variable need not be a reference type.

提交回复
热议问题