C# Pointers in a Method's arguments?

后端 未结 5 2052
一个人的身影
一个人的身影 2021-01-11 22:24

I wish to directly modify a variable\'s value outside of a method from inside it.
Pointers are the way, correct?

How?

5条回答
  •  情书的邮戳
    2021-01-11 22:53

    No. In c# you can apply pass by reference semantics using the ref or out modifiers:

    void Foo( ref string s, ref int x )
    {
        s = "Hello World"; // caller sees the change to s
        x = 100;           // caller sees the change to x
    }
    
    // or, alternatively...
    
    void Bar( out string s )
    {
        s = "Hello World"; 
    }
    

    The difference between these two, is that with out, the caller does not have to specify a value when calling the method, since it is required that the called method will assign a value before exiting.

    In C#, "pointers" are something that you can only use in unsafe code. As in C or C++, pointers in C# allow you to refer to the location of a variable or an object. References, in C# are different - you shouldn't think of them as pointers - they are intended to be more opaque and provide a way to "refer" to a variable or object without necessarily implying that they indicate its location in memory.

    With references, you can use special keywords (out, ref) to pass an alias to a variable. These are only available in the context of method calls - where the compiler can use information about the lifetime of the referents to make sure that the reference does not outlive the original variable being aliased.

提交回复
热议问题