2010-05-06 37 views

Trả lời

61

Loại System.String, như almost tất cả các loại trong .NET, có nguồn gốc từ System.Object. Object có phương thức ToString() và do đó String kế thừa phương pháp này. Nó là một phương thức ảo và String ghi đè nó để trả về một tham chiếu đến chính nó thay vì sử dụng thực thi mặc định để trả về tên của kiểu đó.

Từ Reflector, đây là việc thực hiện ToString trong Object:

public virtual string ToString() 
{ 
    return this.GetType().ToString(); 
} 

Và đây là ghi đè trong String:

public override string ToString() 
{ 
    return this; 
} 
+0

xuất sắc trả lời –

1

String là một đối tượng, nó không phải là một kiểu dữ liệu. Vì String là một đối tượng, nó kế thừa từ đối tượng Root ToString().

Nó giống như trong Java, Objective-C hoặc Scala :)

+2

'int' có một' phương pháp ToString' cũng ... –

+0

nó ngạc nhiên cho tôi :), tôi chỉ nghĩ rằng C# cũng giống như Java, không có phương thức toString cho những điều :) – vodkhang

+0

nó không được viết hoa vì nó là bí danh. Sau khi biên dịch, bí danh đó sẽ được chuyển thành Chuỗi được viết hoa – vodkhang

1

này thậm chí còn đúng đối với java, tôi nghĩ rằng hầu hết các Object Oriented ngôn ngữ lập trình có điều này, một chuỗi đại diện của các đối tượng trong câu hỏi, vì mỗi class bạn tạo theo mặc định nó extedns từ Object do đó dẫn đến việc có phương thức toString(), hãy nhớ nó chỉ áp dụng cho các đối tượng không cho các kiểu premitive.

9

Như Mark đã chỉ ra, nó chỉ trả về một tham chiếu cho chính nó. Nhưng, tại sao điều này lại quan trọng? Tất cả các kiểu cơ bản sẽ trả về một biểu diễn chuỗi của chính chúng. Hãy tưởng tượng chức năng ghi nhật ký hoạt động như sau:

public void Log(object o) { 
    Console.WriteLine(o.ToString()); 
} 

Điều này cho phép bạn chuyển bất kỳ loại cơ bản nào và đăng nhập nội dung của nó. Nếu không có chuỗi trả về chính nó, nó sẽ chỉ đơn giản là in ra "String" chứ không phải là nội dung của nó. Bạn cũng có thể làm điều tương tự với chức năng mẫu.

Hãy nghĩ điều này thật ngớ ngẩn? Đó là cơ bản những gì các chức năng định dạng chuỗi làm. Đó gọi là "ToString" khi bạn làm điều này:

Console.WriteLine("{0}", myString); 
0

Bất kỳ đối tượng trong C# có một chuỗi phương pháp, mặc dù tôi không thể nghĩ ra một lý do tại sao người ta sẽ đúc một chuỗi thành một chuỗi tại thời điểm này ToString() được thừa kế từ kiểu đối tượng, mà tất nhiên là một chuỗi là một ví dụ về.

0

Bạn sẽ nhận được ngoại lệ tham chiếu Null nếu chuỗi của bạn là NULL và bạn sử dụng. ToString();

Sau đây sẽ ném:

string.Format("msgBoxTitle = {0}", msgBoxTitle.ToString()) 

tốt nhất để chỉ cần viết ... Điều này sẽ không ném.

string.Format("msgBoxTitle = {0}", msgBoxTitle) 
Các vấn đề liên quan