Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows Çalışma Zamanı içindeki metin, Platform::String Sınıfı tarafından C++/CX biçiminde gösterilir.
Platform::String Class Windows Çalışma Zamanı sınıflarındaki yöntemlere dizeleri ileri geri geçirirken veya uygulama ikili arabirimi (ABI) sınırındaki diğer Windows Çalışma Zamanı bileşenleriyle etkileşim kurarken kullanın. çeşitli Platform::String Class yaygın dize işlemleri için yöntemler sağlar, ancak tam özellikli bir dize sınıfı olacak şekilde tasarlanmamıştır. C++ modülünüzde, önemli metin işleme işlemleri için wstring gibi standart C++ dize türlerini kullanın ve genel bir arabirime veya bir ortak arabirimden geçirmeden önce nihai sonucu Platform::String^ olarak dönüştürün. veya wstringwchar_t*ile arasında Platform::String dönüştürme yapmak kolay ve verimlidir.
Hızlı geçiş
Bazı durumlarda derleyici, temel dize verilerini kopyalamadan güvenli bir şekilde bir Platform::String oluşturabildiğini veya bir işleve geçirebileceğini String doğrulayabilir. Bu tür işlemler hızlı geçiş olarak bilinir ve saydam olarak gerçekleşir.
Dize yapısı
Nesnenin String değeri sabit (salt okunur) bir dizi (16 bit Unicode) karakterdir char16 . Bir String nesne sabit olduğundan, bir değişkene yeni bir dize değişmez değeri atanması String aslında özgün String nesneyi yeni String bir nesneyle değiştirir. Birleştirme işlemleri özgün String nesnenin yok edilmesini ve yeni bir nesnenin oluşturulmasını içerir.
Değişmez Değerler
Değişmez değer karakteri , tek tırnak içine alınmış bir karakterdir ve değişmez değer dizesi de çift tırnak içine alınmış bir karakter dizisidir. String^ değişkenini başlatmak için değişmez değer kullanırsanız, derleyici değişmez değerin karakterlerden char16 oluştuğu varsayılır. Yani, değişmez değerin önüne 'L' dize değiştiricisi almanız veya sabit değeri bir _T() veya METNEÇEVİr() makrosunun içine almanız gerekmez. Unicode için C++ desteği hakkında daha fazla bilgi için bkz . Unicode Programlama Özeti.
Aşağıdaki örnekte nesneleri oluşturmanın String çeşitli yolları gösterilmektedir.
// Initializing a String^ by using string literals
String^ str1 = "Test"; // ok for ANSI text only. uses current code page
String^ str2("Test");
String^ str3 = L"Test";
String^ str4(L"Test");
//Initialize a String^ by using another String^
String^ str6(str1);
auto str7 = str2;
// Initialize a String from wchar_t* and wstring
wchar_t msg[] = L"Test";
String^ str8 = ref new String(msg);
std::wstring wstr1(L"Test");
String^ str9 = ref new String(wstr1.c_str());
String^ str10 = ref new String(wstr1.c_str(), wstr1.length());
Dize işleme işlemleri
sınıfı String dizeleri ve diğer temel dize işlemlerini birleştirmek, karşılaştırmak için yöntemler ve işleçler sağlar. Daha kapsamlı dize işlemeleri gerçekleştirmek için üye işlevini kullanarak String::Data() nesnesinin String^ değerini olarak const wchar_t*alın. Ardından zengin dize işleme işlevleri sağlayan bir std::wstringbaşlatmak için bu değeri kullanın.
// Concatenation
auto str1 = "Hello" + " World";
auto str2 = str1 + " from C++/CX!";
auto str3 = String::Concat(str2, " and the String class");
// Comparison
if (str1 == str2) { /* ... */ }
if (str1->Equals(str2)) { /* ... */ }
if (str1 != str2) { /* ... */ }
if (str1 < str2 || str1 > str2) { /* ... */ }
int result = String::CompareOrdinal(str1, str2);
if (str1 == nullptr) { /* ...*/ }
if (str1->IsEmpty()) { /* ...*/ }
// Accessing individual characters in a String^
auto it = str1->Begin();
char16 ch = it[0];
Dize dönüştürmeleri
A Platform::String yalnızca char16 karakter veya NULL karakter içerebilir. Uygulamanızın 8 bit karakterlerle çalışması gerekiyorsa, metni olarak ayıklamak için String::D ataconst wchar_t*. Ardından uygun Windows işlevlerini veya Standart Kitaplık işlevlerini kullanarak veriler üzerinde çalışabilir ve yeni bir wchar_t*oluşturmak için kullanabileceğiniz veya Platform::String dönüştürebilirsiniz.
Aşağıdaki kod parçası, bir değişkenin değişkene ve değişkenden String^wstring nasıl dönüştürüldüğünü gösterir. Bu örnekte kullanılan dize işleme hakkında daha fazla bilgi için bkz . basic_string::replace.
// Create a String^ variable statically or dynamically from a literal string.
String^ str1 = "AAAAAAAA";
// Use the value of str1 to create the ws1 wstring variable.
std::wstring ws1( str1->Data() );
// The value of ws1 is L"AAAAAAAA".
// Manipulate the wstring value.
std::wstring replacement( L"BBB" );
ws1 = ws1.replace ( 1, 3, replacement );
// The value of ws1 is L"ABBBAAAA".
// Assign the modified wstring back to str1.
str1 = ref new String( ws1.c_str() );
Dize uzunluğu ve eklenmiş NULL değerleri
String::Length, bayt sayısını değil dizedeki karakter sayısını döndürür. Bir dize oluşturmak için yığın semantiği kullandığınızda bunu açıkça belirtmediğiniz sürece sonlandırıcı NULL karakter sayılmaz.
, Platform::String katıştırılmış NULL değerleri içerebilir, ancak yalnızca NULL birleştirme işleminin sonucu olduğunda. Eklenmiş NUL'ler dize değişmez değerlerinde desteklenmez; bu nedenle, bir Platform::Stringbaşlatmak için eklenmiş DLL'leri bu şekilde kullanamazsınız. dize görüntülendiğinde, örneğin bir Platform::String özelliğe atandığında, içindeki TextBlock::Text eklenmiş NULL değerleri yoksayılır. Ekli NUL'ler, dize değeri özelliği tarafından Data döndürülürken kaldırılır.
StringReference
Bazı durumlarda kodunuz (a) bir std::wstring veya wchar_t dize veya L"" dize değişmez değerini alır ve bunu yalnızca giriş parametresi olarak String^ alan başka bir yönteme geçirir. Özgün dize arabelleğinin kendisi geçerli kaldığı ve işlev döndürmeden önce sessize alınmadığı sürece, dizeyi veya dize değişmez değerini Platformwchar_t* dönüştürebilir ve bunu yerine Platform::String^geçirebilirsiniz. kullanıcı tanımlı bir dönüştürmeye StringReferencesahip olduğundan Platform::String^ buna izin verilir. kullanarak StringReference , dize verilerinin ek bir kopyasını oluşturmaktan kaçınabilirsiniz. Çok sayıda dize geçirdiğiniz döngülerde veya çok büyük dizeler geçirirken kullanarak önemli bir performans geliştirmesi StringReferenceelde edebilirsiniz.
StringReference Ancak temelde özgün dize arabelleği ödünç olduğundan, bellek bozulmasını önlemek için aşırı dikkatli olmanız gerekir. Özgün dizenin bu yöntem döndürdüğünde kapsam içinde olacağı garanti edilmediği sürece zaman uyumsuz bir yönteme geçirmemelisiniz StringReference . StringReference'tan başlatılan String^ ikinci bir atama işlemi gerçekleşirse dize verilerinin ayırmasını ve kopyasını zorlar. Bu durumda, 'nin performans avantajını StringReferencekaybedersiniz.
StringReference Ref sınıfı değil standart bir C++ sınıf türü olduğunu, bunu tanımladığınız başvuru sınıflarının genel arabiriminde kullanamayacağınızı unutmayın.
Aşağıdaki örnekte StringReference'ın nasıl kullanılacağı gösterilmektedir:
void GetDecodedStrings(std::vector<std::wstring> strings)
{
using namespace Windows::Security::Cryptography;
using namespace Windows::Storage::Streams;
for (auto&& s : strings)
{
// Method signature is IBuffer^ CryptographicBuffer::DecodeFromBase64String (Platform::String^)
// Call using StringReference:
IBuffer^ buffer = CryptographicBuffer::DecodeFromBase64String(StringReference(s.c_str()));
//...do something with buffer
}
}