it tells the compiler to treat it as a System.String as opposed to an array of characters.
"foo bar" = char value[] = {f, o, o, , b, a, r, \0};
String* value = "foo bar" //wont compile
String* value = new String("foo bar") // will compile
String* value = S"foo bar" //will compile
and you can do S"FOO BAR"->Substring() and so forth.