Why does Type.IsByRef for type String return false if String is a reference type?

前端 未结 3 503
甜味超标
甜味超标 2021-01-01 23:36

According to this a string (or String) is a reference type.

Yet given:

Type t = typeof(string);

then

if (t.IsBy         


        
3条回答
  •  春和景丽
    2021-01-01 23:52

    There are "reference types" -- for which we have !type.IsValueType -- and then there are types that represent references to anything -- whether their targets are value types or reference types.

    When you say void Foo(ref int x), the x is said to be "passed by reference", hence ByRef.
    Under the hood, x is a reference of the type ref int, which would correspond to typeof(int).MakeReferenceType().

    Notice that these are two different kinds of "reference"s, completely orthogonal to each other.

    (In fact, there's a third kind of "reference", System.TypedReference, which is just a struct.
    There's also a fourth type of reference, the kind that every C programmer knows -- the pointer, T*.)

提交回复
热议问题