Kısa cevap şu: Her ikisi de aynı şey.
string tipi
System.String sınıfının takma adı. Derleme zamanında her ikisi de
System.String ile temsil edilir.
Aynı şekilde
int tipi de
System.Int32'nin takma adı. C# programlama dilinde kullanılan değişken tipi takma adları şöyle:
object: System.Object
string: System.String
bool: System.Boolean
byte: System.Byte
sbyte: System.SByte
short: System.Int16
ushort: System.UInt16
int: System.Int32
uint: System.UInt32
long: System.Int64
ulong: System.UInt64
float: System.Single
double: System.Double
decimal: System.Decimal
char: System.Char
Takma adlarla temsil ettiklerin sınıflar arasında kullanım şekli ve kullanım sonuçları açısından arada fark yok. Fark birinin takma ad olması, diğerinin ise listede de görüldüğü gibi System isim alanının sınıfları olması.
Bu takma adlar, bazı programlama dillerinde kullanılan primitive (ilkel) tipleri C#'da örneklemek için kullanılıyor. Ama aslında C#'da sadece bir tane ilkel tip var o da bir takma adı olmayan
System.IntPtr'dir.
Microsoft'un örneklerine bakılırsa, bir gelenek olarak tip tanımlamalarında string, eğer String sınıfının bir metodu veya özelliğini kullanmak gerekiyorsa String ifadesini kullanmak gerekir.
Örneğin:
string adi = "Ali";
string cumle = String.Concat("Merhaba ", adi);
Takma ad ve sınıf olmaları dışında başka bazı farklar şunlar:
- System ad alanının bildirmeden String sınıfını kullanamazsın. Ama string tipini kullanabilirsin.
- string tipi C# programlama dilinin bir parçasıdır, .NET Framework'un bir parçası değildir.
- Visual Studio gibi geliştirme ortamlarında farklı renklerde görüntülenirler.
Kaynak:
http://stackoverflow.com/questions/7074/in-c-sharp-whats-the-difference-between-string-and-string