2010-10-22 22 views
21

Theo như tôi có thể biết, bất kỳ thành viên tĩnh nào của một lớp như String hoặc Int32 cũng có thể được truy cập từ loại dữ liệu nguyên thủy có liên quan. Vì vậy, String.Format giống với string.FormatInt32.MaxValue giống với int.MaxValue.Sự khác nhau giữa String.Format và string.Format (và các thành viên tĩnh khác của các kiểu dữ liệu nguyên thủy) là gì?

Có sự khác biệt giữa hai biểu mẫu này không? Là một trong những ưu tiên khác? Ngay cả khi chúng giống hệt nhau, thì thường được coi là dễ đọc hơn?

Chỉnh sửa: Vì chúng giống hệt nhau, được ưu tiên từ góc độ con người? Bạn có muốn xem String.Format hoặc string.Format khi đọc mã của người khác không?

Trả lời

38

Không có sự khác biệt, đây là loại bí danh trong C# cho các loại khung .Net, bạn đang gọi cùng một phương thức bên dưới.

Ví dụ:

  • int là một bí danh cho System.Int32
  • string là một bí danh cho System.String

You can find a complete list of these aliases on MSDN here.

+0

Tuyệt, tôi thích điều này. Cảm ơn các liên kết! –

+0

@Matthew - welcome :) –

+1

Khi tôi đang học C# Tôi hơi bối rối về lý do tại sao 'chuỗi' và 'Chuỗi' đều tồn tại. Nó giúp tôi lúng túng mọi thứ khi tôi nhận ra rằng nếu tôi loại bỏ dòng 'using System'; rằng 'Chuỗi' đã trở thành một loại không hợp lệ. – Detmar

4

Chúng giống nhau. stringint là các bí danh cú pháp cho số lần lượt là StringInt32.

2

chuỗi không phải là loại nguyên thủy nhưng chỉ đơn giản là bí danh cho chuỗi. Họ là những điều tương tự.

11

Đó không phải là loại dữ liệu nguyên thủy có liên quan. Chúng chỉ đơn giản là viết tắt trong C#. string bí danh System.Stringint bí danh System.Int32. Các cuộc gọi đến int.MaxValue cuộc gọi đến Int32.MaxValue. C# chỉ cho phép bạn gõ nó trong viết tắt tương tự như những gì bạn sẽ gõ nếu bạn đang ở trong một ngôn ngữ C-like.

3

Chú ý rằng nếu bạn đi vào IDE của bạn và di chuột qua string, bạn sẽ thấy rằng nó được xác định bởi System.String

Đây là một "bí danh" ... một điều là viết tắt cho điều khác . int là bí danh cho Int32, byte là bí danh cho Byte, char là bí danh cho Char, v.v.

8

Hầu hết các câu trả lời đều có chung. BAO GIỜ, có một số trường hợp trong đó bí danh là bắt buộc. Tắt đầu của tôi:

public enum MyEnum:Byte {...} //will not compile 

public enum MyEnum:byte {...} //correct 

Có một vài địa điểm khác mà bạn phải sử dụng bí danh; bên cạnh đó, nó chủ yếu là phong cách.Hai quy tắc sau đây thường được chấp nhận, có lẽ là hai quy tắc đầu tiên được chấp nhận rộng rãi, có lẽ là hai quy tắc đầu tiên hơn số thứ hai:

  • Sử dụng bí danh (từ khóa thường) cho tất cả các định nghĩa xác định biến hoặc loại thành viên (khai báo, tham số, đúc))
  • Sử dụng tên kiểu (định danh lớp PascalCased) cho tất cả các kiểu sử dụng trong ngữ cảnh tĩnh (Gọi các phương thức tĩnh như các trình phân tích cú pháp hoặc các phương thức thao tác chuỗi hoặc các thuộc tính tĩnh như MinValue/MaxValue).
3

Bằng chứng thú vị cho khả năng thay thế của chúng là bản thân IDE.
Bắt đầu nhập List<String> list = new rồi xem đề xuất của IntelliSense: List<string>. Nó thậm chí sẽ không cung cấp cho bạn List<String> là một trong những lựa chọn.

Để trả lời phần thứ hai của câu hỏi của bạn, đó là một vấn đề quan điểm, tôi thích intstring qua chữ hoa vì nhiều lý do:

  • Màu xanh sáng là dứt khoát hơn và nếu bạn mã đọc nhanh, bạn không thể nhầm tên lớp cho một số thứ khác
  • Tôi cần nhấn phím SHIFT + càng nhanh, thì nhanh hơn, tôi nhập
  • IntelliSense sẽ tự động hoàn thành tên chữ thường, ngay cả khi bạn bắt đầu bằng chữ hoa , vì vậy đối với tôi, nó không có tính thẩm mỹ để xem phần trên và dưới ns của cùng một lớp trong cùng một dòng hoặc thậm chí trong cùng một dự án
  • Kiểu int rất đơn giản, và tôi sẽ không muốn buộc phải liên kết với chữ cái viết hoa và hai chữ số tên của nó (tức là Int32); nó làm cho nó trông quá cụ thể vì không có lý do rõ ràng

Một đồng nghiệp của tôi nói cụ thể sử dụng Int32String đảm bảo khả năng tương thích với tương lai Cập nhật .NET; Tôi không đồng ý với bất cứ ai nói điều đó hoàn toàn. Chứng minh cho tôi sai, xin vui lòng!

Các vấn đề liên quan