[{"@context":"http:\/\/schema.org\/","@type":"BlogPosting","@id":"https:\/\/wiki.edu.vn\/all2pl\/wiki27\/c-cli-wikipedia-wikipedia\/#BlogPosting","mainEntityOfPage":"https:\/\/wiki.edu.vn\/all2pl\/wiki27\/c-cli-wikipedia-wikipedia\/","headline":"C ++\/CLI – Wikipedia Wikipedia","name":"C ++\/CLI – Wikipedia Wikipedia","description":"before-content-x4 C ++\/CLI (C ++ zmodyfikowane dla wsp\u00f3lnej infrastruktury j\u0119zykowej) to specyficzny j\u0119zyk programowania stworzony przez Microsoft i zamierzony do","datePublished":"2020-10-26","dateModified":"2020-10-26","author":{"@type":"Person","@id":"https:\/\/wiki.edu.vn\/all2pl\/wiki27\/author\/lordneo\/#Person","name":"lordneo","url":"https:\/\/wiki.edu.vn\/all2pl\/wiki27\/author\/lordneo\/","image":{"@type":"ImageObject","@id":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","height":96,"width":96}},"publisher":{"@type":"Organization","name":"Enzyklop\u00e4die","logo":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":600,"height":60}},"image":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":100,"height":100},"url":"https:\/\/wiki.edu.vn\/all2pl\/wiki27\/c-cli-wikipedia-wikipedia\/","wordCount":2169,"articleBody":" (adsbygoogle = window.adsbygoogle || []).push({});before-content-x4C ++\/CLI (C ++ zmodyfikowane dla wsp\u00f3lnej infrastruktury j\u0119zykowej) to specyficzny j\u0119zyk programowania stworzony przez Microsoft i zamierzony do zast\u0105pienia zarz\u0105dzanych rozszerze\u0144 dla C ++. Jest to kompletna wersja, kt\u00f3rej celem jest uproszczenie starej sk\u0142adni zarz\u0105dzanej C ++, teraz przestarza\u0142y. [Pierwszy] C ++\/CLI zosta\u0142o znormalizowane przez ECMA jako ECMA-372 . Jest dost\u0119pny w Visual Studio 2005, 2008, 2010, 2012, 2013, 2015 i 2017, w tym wersjach ekspresowych. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4C ++\/CLI jest wymy\u015blony jako j\u0119zyk sam w sobie (na przyk\u0142ad z nowym zestawem s\u0142\u00f3w kluczowych), w przeciwie\u0144stwie do zarz\u0105dzanego C ++ (MC ++), co jest raczej a nadzbi\u00f3r C ++, w kt\u00f3rych zidentyfikowano niestandardowe s\u0142owa kluczowe __GC O __warto\u015b\u0107 . W zwi\u0105zku z tym wprowadza kilka wa\u017cnych zmian sk\u0142adniowych, g\u0142\u00f3wnie zwi\u0105zanych z eliminacj\u0105 niejednoznacznych identyfikator\u00f3w i dodaniem okre\u015blonych funkcji NET. Wiele sk\u0142adni w konflikcie, takich jak wiele wersji operatora nowy() W MC ++ zosta\u0142y oddzielone: \u200b\u200bw C ++\/CLI i IN. Net Rodzaje odniesienia s\u0105 tworzone z nowym s\u0142owem kluczowym Gcnew (co jest dla \u015bmieci zebrane nowe () ). Ponadto C ++\/CLI wprowadzi\u0142 poj\u0119cie generyczne z. Net (podobne, dla najcz\u0119stszych cel\u00f3w, do standardowych szablon\u00f3w C ++, ale bardzo r\u00f3\u017cni si\u0119 w ich implementacji). Table of Contents (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Uchwyty [[[ zmiana |. Modifica Wikitesto ] \u015alad referencji [[[ zmiana |. Modifica Wikitesto ] Finizery i zmienne automatyczne [[[ zmiana |. Modifica Wikitesto ] Operator przeci\u0105\u017cenia [[[ zmiana |. Modifica Wikitesto ] Uchwyty [[[ zmiana |. Modifica Wikitesto ] W MC ++ istnia\u0142y dwa r\u00f3\u017cne typy odcink\u00f3w: wska\u017aniki __nogc , zasadniczo zwyk\u0142e odcinki C ++ i wska\u017aniki __GC , u\u017cywane do rodzaj\u00f3w odniesienia. Internet. Jednak w C ++\/CLI jedynym typem wska\u017anika jest normalny wska\u017anik C ++, podczas gdy rodzaje odniesienia. Net s\u0105 dost\u0119pne przez uchwyt Za pomoc\u0105 nowej sk\u0142adni Klassname^ zamiast Nazwa klasy* . Ta nowa konstrukcja jest szczeg\u00f3lnie przydatna, gdy kod zawiera razem standardowy kod C ++ i kod zarz\u0105dzany; Pozwala wyja\u015bni\u0107, jakie obiekty zarz\u0105dza\u0142y zbieranie \u015bmieci Automatyczny. Netto i jakie s\u0105 obiekty, kt\u00f3re programista musi wyra\u017anie zniszczy\u0107. \u015alad referencji [[[ zmiana |. Modifica Wikitesto ] I \u015blad referencji (zwane tak\u017ce odniesieniami do \u015bledzenia) W C ++\/CLI jest uchwytem przesz\u0142ej zmiennej w celach informacyjnych. Jako koncepcja jest podobna do u\u017cycia *& (Odniesienie do wska\u017anika) w klasycznym C ++ i (w funkcjach funkcji) odpowiada s\u0142owowi kluczowe Ref zastosowane do typ\u00f3w w C#, lub Byref W. Internet. Aby wskaza\u0107 przyczepno\u015b\u0107 odniesienia, C ++\/CLI u\u017cywa jako sk\u0142adni ^% . Przyk\u0142ad u\u017cywania \u015blad referencji Jest pokazany w nast\u0119puj\u0105cym kodzie. Zast\u0105pienie \u015bledzenia odniesie\u0144 regularnym uchwytem pozostawi\u0142oby tablic\u0119 ci\u0105g\u00f3w, kt\u00f3re powsta\u0142y w wyniku 10 nieinitalnych strun, poniewa\u017c tylko sznurki uchwytu by\u0142yby ustawione w tablicy, poniewa\u017c s\u0105 one przekazywane przez warto\u015b\u0107, a nie do odniesienia. int g\u0142\u00f3wny () { szyk < Strunowy ^> ^ arr = Gcnew szyk < Strunowy ^> ( dziesi\u0119\u0107 ); int I = 0 ; Do ka\u017cdy ( Strunowy ^% S W arr ) { S = I ++ . Toostring (); } return 0;}Zauwa\u017c, \u017ce w C# ten konstrukt nie by\u0142by dozwolony, bior\u0105c pod uwag\u0119, \u017ce nie zezwala on na przej\u015bcie warto\u015bci do odniesienia przez cykle dla ka\u017cdego . Dlatego konieczne by\u0142oby rozwi\u0105zanie wt\u00f3rne lub tymczasowe. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Finizery i zmienne automatyczne [[[ zmiana |. Modifica Wikitesto ] Kolejn\u0105 r\u00f3\u017cnic\u0105 z C ++\/CLI jest syntaktyczne wprowadzenie finalizator\u00f3w !Nazwa klasy , Specjalny rodzaj nieokre\u015blonego niszczyciela wykonanego w ramach rutyny zbierania \u015bmieci. Sk\u0142adnia klasycznych niszczy C ++, kt\u00f3re ~ ClassName () , istnieje r\u00f3wnie\u017c dla obiekt\u00f3w zarz\u0105dzanych i lepiej odzwierciedla \u201etradycyjn\u0105\u201d semantyk\u0119 C ++ deterministycznego zniszczenia (w rzeczywisto\u015bci niszczyciele mo\u017cna powo\u0142a\u0107 na poziomie kodu za pomoc\u0105 za pomoc\u0105 usuwa\u0107 . W naturalnym paradygmacie .NET nieokerministyczny model zniszczenia anuluje chronion\u0105 metod\u0119 Sfinalizowa\u0107 klasowy Obiekt ; podczas gdy model deterministyczny jest zaimplementowany metod\u0105 Dysponowa\u0107 interfejs IdisposBoBal (\u017ce kompilator C ++\/CLI przekszta\u0142ca si\u0119 w niszczyciel). Obiekty z C# lub VB.NET, kt\u00f3re anuluj\u0105 metod\u0119 dipose, mo\u017cna umie\u015bci\u0107 r\u0119cznie w C ++\/CLI za pomoc\u0105 usuwa\u0107 , podobnie jak zaj\u0119cia. Net w C ++\/CLI. \/\/ C ++\/CLI Ref klasa Moja klasa { publiczny : Moja klasa (); \/\/ producent ~ Moja klasa (); \/\/ niszczyciel (deterministyczny) (zaimplementowany jako idistable.sseposed ()) chroniony : ! Moja klasa (); \/\/ finalizer (niszczyciel nie terministyczny) (zaimplementowany jako finalize ()) publiczny : statyczny pr\u00f3\u017cnia Test () { Moja klasa automatyczny ; \/\/ nie jest uchwytem i nie zainicjowany: kompilator wywo\u0142uje tutaj producent Moja klasa ^ u\u017cytkownik = Gcnew Moja klasa (); usuwa\u0107 u\u017cytkownik ; \/\/ Il compilatore invoca il distruttore automatico quando l'automatico esce dalla visibilit\u00e0 (scope) }};Operator przeci\u0105\u017cenia [[[ zmiana |. Modifica Wikitesto ] Operator przeci\u0105\u017cenia (lub przeci\u0105\u017cenia) dzia\u0142a dok\u0142adnie tak, jak w klasycznym C ++. Ka\u017cdy * staje si\u0119 jednym ^, ka\u017cdy i staje si\u0119%, a reszta sk\u0142adni jest ca\u0142kowicie niezmieniona, z wyj\u0105tkiem: dla klas. Net, operator przeci\u0105\u017cenia jest niestabilny i nie do\u017cywa nie tylko dla samych klas, ale tak\u017ce dla odniesie\u0144 do klas. Ta szczeg\u00f3lno\u015b\u0107 jest konieczna, aby da\u0107 Klasa ref semantyka dla operatora przeci\u0105\u017cenia, \u017ce Zaj\u0119cia ref .NET Oczekuj (wr\u0119cz przeciwnie, oznacza to r\u00f3wnie\u017c, \u017ce klasy ref obecne w ramach. Net odnosz\u0105 si\u0119 do operator\u00f3w przeci\u0105\u017cenia, cz\u0119sto domy\u015blnie zaimplementowane w C ++\/CLI. Na przyk\u0142ad por\u00f3wnanie dw\u00f3ch ci\u0105g\u00f3w odniesienia (ci\u0105g^) za po\u015brednictwem operatora == Zwr\u00f3ci \u201etrue\u201d (true) niezale\u017cnie od tego. B\u0119d\u0105c statycznym operatorem przeci\u0105\u017cenia, wykonaj odlew do obiektu^ usuwa semantyk\u0119 przeci\u0105\u017cenia. \/\/ Wp\u0142yw na odniesienie operatora przeci\u0105\u017cenia Strunowy ^ S1 = \"ABC\" ; Strunowy ^ S2 = \u201eAB\u201d + \"C\" ; Obiekt ^ O1 = S1 ; Obiekt ^ o2 = S2 ; S1 == S2 ; \/\/ prawda, poniewa\u017c odnosz\u0105 si\u0119 do tego samego obiektu O1 == o2 ; \/\/ Fa\u0142sz, poniewa\u017c nie s\u0105 tym samym obiektem Nowy C ++\/CX w celu WinRT, chocia\u017c produkuje ca\u0142kowicie \u201eniezarz\u0105dzany\u201d kod, po\u017cycza koncepcj\u0119 ref i sk\u0142adni ^ w celu odniesienia do zliczania komponent\u00f3w WinRT, kt\u00f3re s\u0105 podobne do obiekt\u00f3w COM. [2] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4"},{"@context":"http:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/wiki.edu.vn\/all2pl\/wiki27\/#breadcrumbitem","name":"Enzyklop\u00e4die"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/wiki.edu.vn\/all2pl\/wiki27\/c-cli-wikipedia-wikipedia\/#breadcrumbitem","name":"C ++\/CLI – Wikipedia Wikipedia"}}]}]