C # ilə simli və simli arasındakı fərq nədir?

Məsələn:

10 авг. Lance Fisher tərəfindən təyin olunan 10 aug. 2008-08-10 10:18 '08 saat 10:18 'da 2008-08-10 10:18
@ 64 cavab
  • 1
  • 2
  • 3

string System.String üçün C # System.String .
Texniki cəhətdən heç bir fərq yoxdur. System.Int32 əleyhinə int kimi.

Tövsiyyələrə gəldikdə, adətən bir obyektə müraciət etdiyiniz zaman string istifadə etmək məsləhət görülür.

məsələn

 string place = "world"; 

Bundan əlavə, məncə, sınıfa xüsusi müraciət etmək lazımdırsa, String istifadə etmək məsləhət görülür.

məsələn

 string greet = String.Format("Hello {0}!", place); 

Bu, Microsoftun nümunələrində istifadə etmək niyyətindədir.

Görünür, bu sahədə liderlik dəyişə bilər, çünki StyleCop indi xüsusi C # aliaslarını tətbiq edir .

5398
10 авг. Cavab Derek Park 10 avqustda verilir. 2008-08-10 10:22 '08 at 10:22 2008-08-10 10:22

Yalnız tamlıq naminə, burada bir serebral dökülmə ilə əlaqəli məlumat ...

Başqaları tərəfindən qeyd edildiyi kimi, string System.String üçün System.String . Onlar eyni kodu tərtib edilir, belə ki, iş zamanı fərq yoxdur. Bu, C #-də yalnız bir addan biridir. Tam siyahı:

 public enum Foo : UInt32 {} // Invalid public enum Bar : uint {} // Valid 

Bu yalnız spesifikasiyanın enum bəyannamələrinin necə müəyyən edildiyi məsələsidir - kolondan sonra hissəsi bir sbyte , byte , short , ushort , int , uint , long , ulong , char ... məsələn, dəyişən bəyannamələr. Bu başqa fərq göstərmir.

Nəhayət, istifadəyə gəldikdə: Mən hər yerdə tətbiq etmək üçün şəxsən istifadə edirəm, ancaq API üçün CLR növü. Əslində, həyata keçirmə baxımından istifadə etdiyiniz qədər vacib deyildir - komandanızın ardıcıllığı xoşdur, lakin heç kimə qayğı yoxdur. Digər tərəfdən, həqiqətən vacibdir ki, bir API-də bir növ müraciət edərsəniz, onu neytral bir dildə edərsiniz. ReadInt32 adlanan ReadInt32 birmənalı deyil, ReadInt adlı üsul isə şərh tələb edir. Zəng edənlər, məsələn, Int16 üçün int aliaslarını müəyyən edən bir dildən istifadə edə Int16 . .NET Framework dizaynerləri bu nümunəni izlədi, yaxşı nümunələr BitConverter , BinaryReaderConvert .

3163
18 окт. Jon Skeet'e cavab Oct 18 2008-10-18 21:52 '08 at 21:52 pm 2008-10-18 21:52

String System.String deməkdir və bu, .NET Framework tipidir. String System.String üçün C # System.String . Hər ikisi də System.String də IL (intermediate >System.String tərtib edilir, buna görə fərq yoxdur. İstədiklərinizi seçin və istifadə edin. C # kodunu yazarkən, C # tipli alias və C # proqramçılarına yaxşı tanıdığından, String'i seçərdim.

Mən də ( int , System.Int32 ) və s.

638
18 окт. 18 saat artur02 tərəfindən verilmiş cavab . 2008-10-18 20:25 '08 at 8:25 pm 2008-10-18 20:25

C #-də təqdim edilən tipli takma adlardan istifadə etdiyinizə dair ən yaxşı cavab Jeffrey Richter tərəfindən CLR Via C # kitabında verilmişdir. Onun 3 səbəbi bunlardır:

  • Bəzi inkişafçıların kodlarında simli və ya simli istifadə etməyini bilmədiklərini gördüm. C # -dən sonra simli (açar söz) tam olaraq System.String (FCL tipində) göstərilir, heç bir fərq yoxdur və onlardan hər hansı biri istifadə edilə bilər.
  • C'de # uzun System.Int64- də göstərilir, lakin müxtəlif proqramlaşdırma dilində uzun Int16 və ya Int32- də göstərilə bilər. Əslində, C ++ / CLI əslində uzun Int32 kimi işləyir . Bir dildə mənbə kodunu oxuyan kimsə, başqa bir proqramlaşdırma dilində proqramlaşdırma üçün istifadə edildiyi təqdirdə kodun niyyətini asanlıqla yanlış şərh edə bilər. Əslində, bir çox dildə uzun müddət bir söz kimi qəbul edilməyəcək və onu istifadə edən kodu tərtib etməyəcəkdir.
  • FCL-də adları metod adlarının bir hissəsi olan bir çox metod var. Məsələn, BinaryReader növü ReadBoolean , ReadInt32 , ReadSingle , və s. Kimi üsulları təqdim edir və System.Convert növü ToBoolean , ToInt32 , ToSingle və s. Aşağıdakı kodu yazmağa icazə verilməsinə baxmayaraq, üzən nöqtə simvolu mənim üçün qeyri-təbii görünür və simli düzgün deyil:
 BinaryReader br = new BinaryReader(...); float val = br.ReadSingle(); // OK, but feels unnatural Single val = br.ReadSingle(); // OK and feels good 

Buna görə də var. Hesab edirəm ki, bu, həqiqətən, yaxşı anlardır. Ancaq Jeffrey'nin məsləhətini öz kodumda istifadə etmirəm. Bəlkə də mənim C # dünyamda sıxışdırılıb, amma sonunda kodumu bir çərçivə kimi göstərməyə çalışıram.

445
16 авг. Luke Foust 16 aug tərəfindən verilmiş cavab 2008-08-16 02:00 '08 saat 02:00 'da 2008-08-16 02:00' de

string qorunur bir söz, ancaq string yalnız bir sinif adıdır. Bu, string dəyişən bir ad olaraq istifadə edilə bilməz deməkdir.

Nədənsə dəyişən bir dize adına ehtiyac varsa, bu kompilyasiyaların yalnız ilkini görürsünüz:

 StringBuilder String = new StringBuilder(); // compiles StringBuilder string = new StringBuilder(); // doesn't compile 

Həqiqətən, dəyişən adın bir simli deyilməsini istəyirsinizsə, prefiks olaraq @ istifadə edə bilərsiniz:

 StringBuilder @string = new StringBuilder(); 

Başqa bir tənqidi fərq, yığma daşqınları onları fərqli olaraq vurğulamaqdır.

405
24 февр. cavab Simon_Weaver 24 fevral. 2009-02-24 08:14 '09 saat 08:14 'da 2009-02-24 08:14

Bir fərq var - using System; etmədən String istifadə edə bilməzsiniz using System; əvvəlcədən.

348
27 авг. Cavab user3296 27 aug tərəfindən verilir . 2008-08-27 21:21 '08 saat 09:21 'da 2008-08-27 21:21

Bu yuxarıda nəzərdən keçirilmişdir; ancaq, əksik olaraq string istifadə edə bilməzsiniz; string istifadə etməlisiniz.

282
19 окт. TraumaPony tərəfindən verilmiş cavabı Oct 19. 2008-10-19 04:04 '08 at 04:04 2008-10-19 04:04

System.String bir .NET sinif dizesi - C # System.String üçün System.String - onlar istifadədə eynidır.

Təlimatlara gəldikdə, mən çox təlaşlı olmayım və istərdim ki, istifadəni istifadə etməliyəm - həyatda daha vacib şeylər var və istənilən halda kod eyni olacaq.

Siz sistemlər olduğunuzu Int16 , istifadə Int16 tamsayıların ölçüsünü təyin Int16 və bu səbəbdən onlar Int16 , Int32 , UInt16 , UInt32 , və s. UInt32 , sonra UInt32 daha təbii istifadə etmək olar və hərəkət edərkən different.net ilə bu, daha çox başa düşülə bilər - əksinə, bir simli və int istifadə edərdim.

221
10 авг. Ronnie 10 aug tərəfindən verilmiş cavab . 2008-08-10 10:26 '08 saat 10:26 'da 2008-08-10 10:26

Valters, mən bildiyiniz qədər string , int və s. Üslubunda qlobal aliasları təyin edə bilməzsiniz. Ancaq, açar sözü using növləri və ad alanları üçün daha çox lokallaşdırılmış anti-aliasing edə bilərsiniz.

məsələn.

 using str = System.String; using strDict = System.Collections.Generic.Dictionary<string, string>; //... str s = "Now you've got another alias for string!"; var d = new strDict(); 

Buraya baxın: direktivdən istifadə edin (C # istinad)

193
10 авг. Cavab Derek Park 10 avqustda verilir. 2008-08-10 11:17 '08 at 11:17 2008-08-10 11:17

Mən formatlaşdırmaq üçün kapitallaşdırılmış .NET növlərini (takma adlardan daha çox) üstünlük verirəm. .NET növləri digər növ obyektlərlə eyni rəngdədir (bütün bunlardan sonra dəyər növləri).

Şərti və nəzarət açar sözləri (məsələn, switchreturn ) kiçik və rəngli mavi rənglərə (default olaraq) malikdir. Mən istifadəyə və formata fərqli olmayın.

Düşün:

183
03 сент. Cavab Anthony Mastrean tərəfindən verilir 03 Sep. 2008-09-03 21:58 '08 at 21:58 2008-09-03 21:58

stringstring hər baxımdan eynidır ("S" böyük harflər istisna olmaqla). Performansa heç bir təsir.

Sintaksis işıqlandırması səbəbindən çox layihələrdə kiçik halda string seçim edilir.

175
18 окт. Cavab TheSoftwareJedi 18 oktyabr tərəfindən verilir . 2008-10-18 19:50 '08 saat 19:50 'da 2008-10-18 19:50

C # CLR ilə istifadə olunan dildir.

string C # string bir növüdür.

System.String CLR bir növüdür.

C # istifadə CLR string ilə birlikdə System.String göstərilir.

Teorik olaraq, Java bytecode yaradan bir C # derleyicisini tətbiq edə bilərsiniz. Bu kompilyatorun məqbul tətbiqi, ehtimal ki, Java runtime kitabxanası ilə qarşılıqlı əlaqə yaratmaq üçün java.> bir string java.> .

162
17 марта '09 в 23:29 2009-03-17 23:29 Cavab Rasmus Faber tərəfindən 17 Mart 17'09 tarixində 23:29 'də verilmişdir 2009-03-17 23:29

Bu YouTube videoları praktik olaraq necə olduqlarını göstərir.

Amma uzun bir mətn cavabı üçün.

.NET haqqında danışarkən iki fərqli şey var: bir .NET çərçivəsi var, digəri də bu infrastrukturu istifadə edən VB.NET ( C# , VB.NET , və s.).

2019

150
15 янв. cavab 15 dekabrda Şivprasad Koirala tərəfindən verilir . 2014-01-15 21:03 '14 at 21:03 2014-01-15 21:03

string yalnız System.String üçün bir takma ad. Derleyici onları eyni şəkildə idarə edəcək.

Yalnız praktik fərq sintaksis işıqlandırmasıdır, necə qeyd etdiniz və string istifadə edərkən using System etməlisiniz.

138
18 окт. Hallgrim tərəfindən verilmiş cavabı Oct 18 2008-10-18 19:50 '08 saat 19:50 'da 2008-10-18 19:50

Aşağıdakı string System.String üçün bir System.String . Onlar C# eynidır.

Sistem növləri ( System.Int32 , System.String , və s.) Və ya C# aliases ( int , string , və s.) İstifadə etməyi müzakirə edir. Şəxsən düşünürəm ki, C# aliases istifadə edirsiniz, ancaq bu yalnız şəxsi seçimlərimdir.

137
10 авг. Cavab verilir urini 10 aug. 2008-08-10 10:27 '08 saat 10:27 'da 2008-08-10 10:27

Hər ikisi eynidır. Amma kodlaşdırma kitabçası baxımından string əvəzinə string istifadə etmək daha yaxşıdır. Bu, developers adətən istifadə edir. məsələn, Int32 yerinə int istifadə edirik, çünki int Int32 üçün Int32

FYI "Anahtar sözcük dizesi, önceden tanımlanmış System.String sınıfı üçün bir takma ad." - C dilinin spesifikasiyası # 4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspx

125
18 окт. Cavab 18 oktyabrda Pradeep Kumar Mishra tərəfindən verilir . 2008-10-18 21:26 '08 at 21:26 2008-10-18 21:26

Digərləri deyirlər ki, onlar eynidır. Standart olaraq StyleCop qaydaları String.Format , String.Join , String.Concat kimi statik System.String funksiyaları istinadən istisna olmaqla, ən yaxşı C # stil kodu tətbiqini string istifadə etməyə məcbur edəcək.

105
19 окт. 19 oktyabrda Lloyd Cotten tərəfindən verilmiş cavab . 2008-10-19 04:15 '08 saat 04:15 'da 2008-10-19 04:15

Sistem tiplərini istifadə edərək, bu cədvələ rəhbərlik edirsinizsə C # və VB.Net arasında köçürməyi asanlaşdırır.

85
22 сент. Cavab İsmael 22 Sentyabr verilir. 2008-09-22 22:40 '08 saat 22:40 'da 2008-09-22 22:40

Digər programcılar arasında ümumi təcrübə kimi göründüyünə qarşı String String'i John Skit'in qeyd etdiyi kimi String'in bir istinad növü olduğuna vurğu etmək üçün üstün edirəm.

80
31 мая '11 в 14:20 2011-05-31 14:20 cavab RolandK tərəfindən 31 may 2011- ci il saat 14:20 da verilir. 2011-05-31 14:20

string alias (və ya kısaltma) System.String . Yəni string yazaraq, System.String deməkdir. Ağıl linkdə daha ətraflı oxuya bilərsiniz: 'string' System.String üçün bir taxma / stenar.

75
21 окт. JeeShen Lee tərəfindən 21 oktyabrda cevap verildi 2011-10-21 04:10 '11 at 4:10 2011-10-21 04:10

String ( System.String ) əsas sinif kitabxanasındakı bir sinifdir. string (kiçik halda) System.String üçün taxma adı olan C # -də qorunan bir işdir. Int32 vs int Boolean vs. bool eynidır. Boolean vs. bool . Bu C # açar sözlər, primitivləri C-ye bənzər bir üslubda elan etməyə imkan verir.

67
15 янв. Joe Alfano tərəfindən 15 yanvarda verilən cavab 2012-01-15 01:51 '12 at 1:51 2012-01-15 01:51

String bir söz deyil və bir identifikator kimi istifadə edilə bilər, String bir söz və bir identifikator kimi istifadə edilə bilməz. Və funksional baxımdan onlar həm də eynidır.

61
25 апр. cavab user576533 25 apr tərəfindən verilir . 2011-04-25 09:06 '11 at 9:06 2011-04-25 09:06

Sonuncu partiya: CLR-lərin vaxtının 100% -ni istifadə edirəm (yaxşı ki, mən C # -dən zorla istifadə etsəm də, son dəfə olduğumu xatırlamıram).

Mən əvvəlcə Ritchie'nin CLR kitablarına görə bunu bir çox il əvvəl etməyə başladım. Bütün CLR dilləri CLR tip dəstini dəstəkləyə bilməsi üçün mənim üçün məqbul idi, belə ki, CLR növlərindən daha aydın və daha çox istifadə edilə bilən bir kod təmin edərdi.

İndi bunu bir neçə ildir ki, bu bir vərdişdir və VS CLR tipləri üçün göstərdiyi rəngləri sevirəm.

Yalnız real endirici ki, avtomatik tamamlama C # tipini istifadə edir, belə ki CLR tipini göstərmək üçün avtomatik olaraq hazırlanmış növləri təkrar yazmağa başlayıram.

Bundan əlavə, indi "int" və ya "string" gördükdə, mənə yalnız yanlış görünür, məsələn, mən 1970-ci ildə koduna baxıram.

61
24 авг. Michael Ray Lovett tərəfindən verilmiş cavab Aug 24 2012-08-24 18:22 '12 saat 18:22 'da 2012-08-24 18:22

Mən bunu lfousts-a, Ritchers kitabından əlavə etmək istərdim:

C # dilinin dəqiqləşdirilməsi deyilir: "Üsluba əsasən, bir sözündən istifadə sistem tipinin tam adını istifadə etmək üstündür." Dilin dəqiqləşdirilməsi ilə razılaşmıram; FCL tipli adlardan istifadə etməyi üstün edirəm və ibtidai tip adlarını tamamilə qorumağa üstünlük verirəm. Əslində, kompilyatorlar, hətta primitiv tip adları və məcburi tərtibatçıların yerinə FCL tipli adları istifadə etməyi təklif etmədiklərinə görə üzr istəyirik. Mənim səbəblərim:

  • Bəzi developers şablon almaq, onların kodu bir string və ya bir String istifadə olub bilmədən gördüm. C # (keyword) simli tam olaraq System.String (FCL tipi) ilə eşlenen olduğundan, fərq yoxdur və istifadə edilə bilər. Eynilə, bəzi developers deyir ki, 32 bitlik bir əməliyyat sistemində 32-bit integer və 64 bitlik bir əməliyyatda tətbiq edildikdə 64 bitlik bir tam ədəddir. Bu bəyanat tamamilə səhvdir: C #, int hər zaman System.Int32 ilə əlaqələndirilir və kodun işlədildiyi OS-dan asılı olmayaraq 32 bit tamsayıdır. Programcılar Int32 kodunu öz kodlarında istifadə edirlərsə , bu potensial qarışıqlıq da aradan qaldırılacaq.

  • C # -də, System.Int64-a uzun xəritələr, lakin başqa bir proqramlaşdırma dilində uzun Int16 və ya Int32 göstərə bilər . Əslində, C ++ / CLI uzun müddət Int32 kimi bir müalicədir. Bir dildə mənbə kodunu oxuyan kimsə başqa bir proqramlaşdırma dilində proqram üçün istifadə edildiyi təqdirdə kodların niyyətini asanlıqla yanlış qiymətləndirə bilər. Əslində, bir çox dildə bir sözü uzun müddət düşünməyəcək və onu istifadə edən kodu tərtib etməyəcəkdir.

  • FCL metod adlarının bir hissəsi kimi tip adları olan bir çox üsula malikdir. Məsələn, BinaryReader növü ReadBoolean , ReadInt32 , ReadSingle , və s. Kimi üsulları təqdim edir və System.Convert növü ToBoolean , ToInt32 , ToSingle və s. Aşağıdakı kodu yazmaq qanuni olmasına baxmayaraq, float xətti mənə çox qeyri-təbii görünür və xəttin düzgün olmadığını görmürəm:

     BinaryReader br = new BinaryReader(...); float val = br.ReadSingle(); // OK, but feels unnatural Single val = br.ReadSingle(); // OK and feels good 
  • Bir çox C # proqramçıları digər proqramlaşdırma dilləri CLR-ə qarşı istifadə edilə biləcəyini unutmur və bu səbəbdən də C # -sizmləri sinif kitabxanasının koduna daxil olur. Məsələn, Microsoft FCL demək olar ki, tamamilə C # -də yazılıdır və FCL qrupunun işləyiciləri artıq kütləvi kitabxanada, məsələn, C # -də daha uzun olan Int64 dəyərini qaytarır, digər dillərdə (məsələn, [CN10] / CLI). Digər bir nümunə System.Linq.Enumerable s LongCount metodudur .

Tam bəndini oxudumdan əvvəl fikirlərini ala bilmədim.

60
28 янв. Cavab claudioalpereira yanvar 28 verilir 2011-01-28 13:08 '11 at 13:08 2011-01-28 13:08

Bu konvensiya məsələsidir. string C / C ++ üslubuna bənzəyir. Ümumi konvensiya seçdiyiniz dildə seçilmiş hər hansı bir yazı (Int / Int üçün Int) istifadə Int32 . Bu da "obyekt" və onlu üçün də aiddir.

Teorik olaraq, bu kodu "int" Int64 demək olar ki, gələcək 64-bit standartına kodun köməyi ilə kömək edə bilər, amma belə deyil və hər hansı bir yeniləmə sihirbazının Int32 ə int təhlükəsiz olma.

53
18 авг. Cavab Mel 18 aug verilir . 2008-08-18 20:58 '08 at 8:58 pm 2008-08-18 20:58

Fərq yoxdur.

C # string sözü, type. NET System.String , dil adlandırma konvensiyalarını dəstəkləyən bir aliasdır.

Eynilə int System.Int32 ilə System.Int32 .

46
15 янв. Cavab Oded 15 Yanvar verildi 2012-01-15 01:47 '12 'də 1:47' də 2012-01-15 01:47

6 il və 5 aydan sonra yeni cavab (gecikmə).

string həmişə sabit bir dəyəri olan qorunur C # sözü olsa da, string yalnız bir şeyə istinad edə bilən müntəzəm identifikatordur. Cari tip üzvlərinə bağlı olaraq, istifadə olunan ad sahəsi və istifadə olunan direktivlər və string yerləşdirilməsi global::System.String başqa bir dəyər və ya növü ola bilər.

İki nümunə verəcəyəm ki, direktivlərdən using etməyəcəksiniz.


Birincisi, string cari tipin dəyəri (və ya lokal dəyişən) olduqda:

 class MySequence<TElement> { public IEnumerable<TElement> String { get; set; } void Example() { var test = String.Format("Hello {0}.", DateTime.Today.DayOfWeek); } } 

IEnumerable<> , Format adlı qeyri-statik bir üzvü yoxdursa və uzantı metodları istifadə IEnumerable<> yuxarıda tərtib edilməyəcəkdir. Yuxarıdakı hallarda, string kontekstlərdə tipi istifadə edə bilərsiniz, burada yazın yalnız sintaktik olaraq mümkündür. Məsələn, String local = "Hi mum!"; (adlar və using qaydalarından asılı olaraq) ola bilər.

Хуже: высказывание String.Concat(someSequence) будет (в зависимости от using s) перейти к методу расширения Linq Enumerable.Concat . Он не переходит к статическому методу string.Concat .


Во-вторых, если string - это другой тип , вложенный внутри текущего типа:

 class MyPiano { protected class String { } void Example() { var test1 = String.Format("Hello {0}.", DateTime.Today.DayOfWeek); String test2 = "Goodbye"; } } 

Ни один из операторов в методе Example не компилируется. Здесь string всегда является пианино string , MyPiano.String . Нет члена ( static или нет) Format существует на нем (или наследуется от его базового класса). И значение "Goodbye" не может быть преобразовано в него.

43
ответ дан Jeppe Stig Nielsen 15 янв. '15 в 17:21 2015-01-15 17:21

Вот цитата из этой статьи из книга Даниэля Солиса .

Все предопределенные типы отображаются непосредственно на основных типов .NET. Названия типов С# (строка) - это просто псевдонимы для .NET(String или System.String), поэтому использование имен .NET отлично работает синтаксически, хотя это обескураживает. В рамках программы С# вы должны использовать имена С# а не имена .NET.

39
ответ дан user2771704 01 нояб. '13 в 18:21 2013-11-01 18:21

строка - это ключевое слово, и вы не можете использовать строку в качестве идентификатора.

Строка не является ключевым словом, и вы можете использовать ее как идентификатор:

Misal

 string String = "I am a string"; 

Ключевое слово string является псевдонимом для System.String Помимо проблемы с ключевым словом, эквивалентны.

  typeof(string) == typeof(String) == typeof(System.String) 
38
ответ дан Neel 11 июня '14 в 8:26 2014-06-11 08:26

Да, нет никакой разницы между ними, как и bool и Boolean .

36
ответ дан Coder 08 окт. '12 в 11:22 2012-10-08 11:22
  • 1
  • 2
  • 3

Другие вопросы по меткам или Задайте вопрос