Không. Trình biên dịch không thay đổi cấu trúc. Đối số hàm tạo nên kiểu nào? Chuỗi? ;-)
Chuỗi ký tự là các hằng số không có tên.
Bên cạnh đó, bạn có thể khởi tạo bất kỳ lớp học với một chuỗi chữ, nếu nó hỗ trợ một nhà điều hành:
public class UnitTest1 {
class MyStringable {
public static implicit operator MyStringable(string value) {
return new MyStringable();
}
}
[TestMethod]
public void MyTestMethod() {
MyStringable foo = "abc";
}
}
Sửa Để được rõ ràng hơn: Như bạn hỏi, nếu
chuỗi sẽ được chuyển đổi thành bất kỳ lệnh gọi hàm tạo nào, hãy xem xét mã IL.
Taken phương pháp thử nghiệm này:
[TestClass]
class MyClass {
[TestMethod]
public void MyTest() {
string myString = "foo";
if (myString == "bar")
Console.WriteLine("w00t");
}
}
Tạo mã IL sau:
.method public hidebysig instance void MyTest() cil managed
{
.custom instance void [Microsoft.VisualStudio.QualityTools.UnitTestFramework]Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute::.ctor()
.maxstack 2
.locals init (
[0] string myString,
[1] bool CS$4$0000)
L_0000: nop
L_0001: ldstr "foo"
L_0006: stloc.0
L_0007: ldloc.0
L_0008: ldstr "bar"
L_000d: call bool [mscorlib]System.String::op_Equality(string, string)
L_0012: ldc.i4.0
L_0013: ceq
L_0015: stloc.1
L_0016: ldloc.1
L_0017: brtrue.s L_0024
L_0019: ldstr "w00t"
L_001e: call void [mscorlib]System.Console::WriteLine(string)
L_0023: nop
L_0024: ret
}
Như bạn thấy, tất cả các giá trị chuỗi (foo, quầy bar và w00t) vẫn là chuỗi và không gọi bất kỳ hàm tạo ẩn nào.
Hy vọng điều này giải thích thêm.
Nguồn
2010-07-25 09:48:25
[Chủ yếu là đúng] (http://msdn.microsoft.com/en-us/library/system .string_members.aspx), nhưng chuỗi phức tạp hơn một chút, và được lưu trữ và chia sẻ theo những cách kỳ lạ. Chúc may mắn. – Kobi