According to this a string (or String) is a reference type.
Yet given:
Type t = typeof(string);
then
if (t.IsBy
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*
.)