.NET'te “String” ve “string” arasındaki fark hangisi?


15

.NET Framework'te, en azından C # dilinde, dize türünün iki "sürümü" var:

  • "String"
  • "Dize"

Görünüşe göre değiştirilebilirler, ama gerçekten mi? Değiştirilemezlerse, birini diğeri yerine kullanmak daha iyidir ve hangi koşullar altında?



2
Biçimsel olarak, türe başvururken küçük harf sürümünü ve System.String statik yöntemini çağırırken büyük harf sürümünü kullanmaya eğilimliyim.
Joel Mueller


2
stringiçinde yok .net, sadece C # 'da var.
CodesInChaos

1
Bu, Stack Overflow için biraz daha uygun olsa da, Programcılar için tamamen konu dışı olduğunu düşünmüyorum ve Stack Overflow'un zaten en az bir kopyası olduğundan, bunu taşımanın pek bir anlamı olmayacaktır. Bu nedenle lütfen taşınmak için işaretlemeyi / oylamayı kapatın, bunun kapalı olması gerektiğini düşünüyorsanız, bu harika, ancak taşınmamış olarak kapatılmalıdır.
yannis

Yanıtlar:


30

Eh göre MSDN

dize , .NET Framework'teki Dize için bir diğer addır.

"String" aslında burada System.String.

Değiştirilebilir olduklarını ve ne zaman ve nerede kullanmanız gerektiği konusunda hiçbir fark olmadığını söyleyebilirim.

Hangisini kullandığınızla tutarlı olmak daha iyi olurdu.


Nedense ben kafamda Dize bir değer türü dize etrafında bir sınıf sarıcı olduğunu ve bu boks fikrine yol açmıştı ... ben burada tamamen yanlış mı?
Aaron Anodide

1
@ Gabriel Gabriel Hayır String(ve dolayısıyla stringtakma adla) referans türleridir.
Kris Harper

@ Gabriel: Java bunu byte vs Byte gibi şeylerle yapmıyor mu?
whatsisname

Aynı durum Double vs double ve diğer veri türleri için de geçerli mi?
Gavin Coates

1
@AaronAnodide Bunun bir Java sözleşmesi olduğuna inanıyorum, muhtemelen duyduğunuz yerde.
KChaloux

20

Belirtildiği gibi, onlar aynı şeydir ve stringsadece bir takma addır String.

Değeri ne için, ben stringdeğişkenleri, özellikleri, dönüş değerleri ve parametreleri - türleri bildirmek için kullanın . - Bu, diğer sistem türlerine kullanımı ile tutarlıdır int, bool, varvb (her ne kadar Int32ve Booleanaynı zamanda doğru).

Veya Stringgibi String sınıfında statik yöntemleri kullanırken kullanın . Bunun daha anlamlı olduğunu hissediyorum çünkü yöntemler bir sınıfa ait ve diğer statik yöntemleri nasıl kullandığımla tutarlı.String.Split()String.IsNullOrEmpty()


Bu sözleşmeyi işyerinde de kullanıyoruz ve beğendim. Beynim otomatik olarak bağlantıyı kurar.
SBI

4

Küçük harf kullanmanızı öneririm string. Büyük harf String, içe aktarılan ad alanlarında bulduğu String adlı birinci sınıfı kullanır System.String. Bunun yerine kendi String sınıfınızın kullanılması mümkündür.


3
Aynı ada sahip iki farklı içe aktarma türünüz varsa ve bu adı ad alanı niteliği olmadan kullanıyorsanız, bir hata iletisi alırsınız.
svick

Çalışmak için kandırmak mümkündür, kandırmak Stringasla mümkün değildir string.
Bryan Boettcher

Yine de, bunun kullanmak için yeterince iyi bir neden olduğunu düşünmüyorum string.
svick

5
"Biri nasıl kırılabilir" ve "hiç kırılmayacak" diğerlerinin özdeş olması yeterince iyi bir neden değil midir?
Bryan Boettcher

4

string için bir takma ad olan bir C # anahtar kelimesidir System.String

Bir anahtar kelime olduğu gibi, başka vb Üslup, sen yerine anahtar kelimeyi kullanmayı tercih edebilir eğer ..ama, editör boyama Sözdiziminizin / IDE, int ile aynı çift, anahtar kelime renkte bunu gösterecektir System.Stringsadece tip (ya da Stringsonra yaptınız using System;).

Bu her ne kadar olsa da, bir niş noktası bool, char, int, doubleve stringsistem tipleri için tüm anahtar rumuzudur, stringbir tek sayılı bir çıkış, bir referans türü ve diğerleri değeri türleri gibi.


4
objectreferans türü için de bir anahtar kelime takma adıdır
nikie

Ah evet, hepsini unuttum - hatırlatma için teşekkürler.
JBRWilkinson

2

stringsadece bir takma addır String, sonuçta aynıdır.

Genellikle kullanmak karşın, tercih ettiğiniz kullanabilirsiniz stringilkel veri türü gibi çok bunu kullanarak ben planlıyorum zaman (benzer int, floatya da bool) ve Stringben bir nesne / sınıf olarak kullanmaktan üzerinde planlama olduğumda. Örneğin:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

Yukarıdaki durumda, foosadece bazı metinleri (ilkel olarak etkili) depolamak için kullanmayı planlıyorum , bu yüzden kullanıyorum string; ancak ben String.isNullOrWhitespace(string)aradığımda kullanıyorum String. Bunu yapıyorum, çünkü genel olarak sınıf isimlerinin ilk harfi büyük harfle Stringyazılırken ( ) büyük harfle yazılırken, ilkel harflerin ilk harfi (gibi int) değildir.


-2

Dize System.String ad alanı ile kullanılır, dize C # derleyici belirtimi, ayrıca System.String referans türü değeridir. Sistem nesnelerini, dizgiyi yalnızca değişmez amaçlar için ele almayı tercih edersiniz. Sistem ve sistemin ikisi de aynıdır.

string TC = new System.String('/', 5);

Dize karşılaştırma, eşit ve diğer amaçlar için de kullanılır.


4
bu önceki 6
cevapta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.