Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Kiểu string trong c# là tham chiếu hay tham trị ???

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    99

    Question Kiểu string trong c# là tham chiếu hay tham trị ???

    Theo 1 số tài liệu mình đọc thì kiểu string trong c# là tham chiếu (Reference Type) nhưng khi test thì rõ ràng là :
    Code:
    String chuoi1 = “ABC”;
    String chuoi2 = “ABC”;
    bool check = ( chuoi1 == chuoi2 );
    trả về kết quả là true . Ai có thể giải thích điều này cho mình hiểu được không ?
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi thvnhn : 04-11-2013 lúc 04:20 PM.

  2. #2
    Ngày gia nhập
    05 2012
    Bài viết
    89

    Trích dẫn Nguyên bản được gửi bởi thvnhn Xem bài viết
    Theo 1 số tài liệu mình đọc thì kiểu string trong c# là tham chiếu (Reference Type) nhưng khi test thì rõ ràng là :
    Code:
    String chuoi1 = “ABC”;
    String chuoi2 = “ABC”;
    bool check = ( chuoi1 == chuoi2 );
    trả về kết quả là true . Ai có thể giải thích điều này cho mình hiểu được không ?
    Cái toán tử == trong C# được overload để so sánh giá trị rồi.
    (Chú ý: Tiêu đề chưa rõ ràng)
    Sống là trân trọng và chia sẻ, khi không trân trọng và chia sẻ thì cuộc đời chẳng còn ý nghĩa gì.

  3. #3
    Ngày gia nhập
    12 2010
    Bài viết
    99

    Trích dẫn Nguyên bản được gửi bởi SuperUser Xem bài viết
    Cái toán tử == trong C# được overload để so sánh giá trị rồi.
    (Chú ý: Tiêu đề chưa rõ ràng)
    Mình sửa lại tiêu đề rồi . Theo mình biết thì == là so sánh địa chỉ còn Equals mới so sánh giá trị của string mà . Hay mình hiểu sai gì ?

    "When == is used on an object type, it'll resolve to System.Object.ReferenceEquals.

    Equals is just a virtual method and behaves as such, so the overridden version will be used (which, for string type compares the contents)."

    Oh mình tìm ra câu trả lời rồi . Theo microsoft thì :
    "The string type represents a sequence of zero or more Unicode characters. string is an alias for String in the .NET Framework.

    Although string is a reference type, the equality operators (== and !=) are defined to compare the values of string objects, not references. This makes testing for string equality more intuitive"

    Củ chuối thật !

  4. #4
    Ngày gia nhập
    05 2012
    Bài viết
    89

    Trích dẫn Nguyên bản được gửi bởi thvnhn Xem bài viết
    Mình sửa lại tiêu đề rồi . Theo mình biết thì == là so sánh địa chỉ còn Equals mới so sánh giá trị của string mà . Hay mình hiểu sai gì ?

    "When == is used on an object type, it'll resolve to System.Object.ReferenceEquals.

    Equals is just a virtual method and behaves as such, so the overridden version will be used (which, for string type compares the contents)."
    Although string is a reference type, the equality operators (== and !=) are defined to compare the values of string objects, not references. This makes testing for string equality more intuitive.

    http://msdn.microsoft.com/en-us/libr.../362314fe.aspx
    Sống là trân trọng và chia sẻ, khi không trân trọng và chia sẻ thì cuộc đời chẳng còn ý nghĩa gì.

  5. #5
    Ngày gia nhập
    08 2013
    Bài viết
    88

    Không hiểu ý bạn lắm nhưng trong ngoặc là 1 phép so sánh đương nhiên sẽ trả về kiểu bool ( == ,< , > ....)

  6. #6
    Ngày gia nhập
    05 2012
    Bài viết
    89

    Mặc định Kiểu string trong c# là tham chiếu hay tham trị ???

    Trích dẫn Nguyên bản được gửi bởi thvnhn Xem bài viết
    Mình sửa lại tiêu đề rồi . Theo mình biết thì == là so sánh địa chỉ còn Equals mới so sánh giá trị của string mà . Hay mình hiểu sai gì ?

    "When == is used on an object type, it'll resolve to System.Object.ReferenceEquals.

    Equals is just a virtual method and behaves as such, so the overridden version will be used (which, for string type compares the contents)."

    Oh mình tìm ra câu trả lời rồi . Theo microsoft thì :
    "The string type represents a sequence of zero or more Unicode characters. string is an alias for String in the .NET Framework.

    Although string is a reference type, the equality operators (== and !=) are defined to compare the values of string objects, not references. This makes testing for string equality more intuitive"

    Củ chuối thật !
    Cần chú ý là C# cho phép overload các operator cho nên dấu == có thể định nghĩa với những ý nghĩa mà mình muốn cho 1 class chẳng hạn như Vector hoặc Matrix.
    Sống là trân trọng và chia sẻ, khi không trân trọng và chia sẻ thì cuộc đời chẳng còn ý nghĩa gì.

  7. #7
    Ngày gia nhập
    12 2010
    Bài viết
    99

    Trích dẫn Nguyên bản được gửi bởi noinhotnn Xem bài viết
    Không hiểu ý bạn lắm nhưng trong ngoặc là 1 phép so sánh đương nhiên sẽ trả về kiểu bool ( == ,< , > ....)
    == là so sánh địa chỉ , còn Equals mới là so sánh giá trị mà

  8. #8
    Ngày gia nhập
    12 2010
    Bài viết
    99

    Trích dẫn Nguyên bản được gửi bởi SuperUser Xem bài viết
    Cần chú ý là C# cho phép overload các operator cho nên dấu == có thể định nghĩa với những ý nghĩa mà mình muốn cho 1 class chẳng hạn như Vector hoặc Matrix.
    Hóa ra nó cho overload . Mình chưa hiểu vế sau của bạn "có thể định nghĩa với những ý nghĩa mà mình muốn cho 1 class chẳng hạn như Vector hoặc Matrix" . Bạn có thể nói rõ hơn chút được không ?

  9. #9
    Ngày gia nhập
    05 2012
    Bài viết
    89

    Trích dẫn Nguyên bản được gửi bởi thvnhn Xem bài viết
    Hóa ra nó cho overload . Mình chưa hiểu vế sau của bạn "có thể định nghĩa với những ý nghĩa mà mình muốn cho 1 class chẳng hạn như Vector hoặc Matrix" . Bạn có thể nói rõ hơn chút được không ?
    Ờ, thì chẳng hạn như mình viết 1 cái class Vector mình muốn thao tác so sánh bằng giữa 2 vector đơn giản thì mình định nghĩa lại phép toán ==
    Hoặc class số phức chẳng hạn
    Sống là trân trọng và chia sẻ, khi không trân trọng và chia sẻ thì cuộc đời chẳng còn ý nghĩa gì.

  10. #10
    Ngày gia nhập
    05 2012
    Bài viết
    89

    Trích dẫn Nguyên bản được gửi bởi thvnhn Xem bài viết
    == là so sánh địa chỉ , còn Equals mới là so sánh giá trị mà
    == là so sánh gì thì tùy định nghĩa nhé
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Sống là trân trọng và chia sẻ, khi không trân trọng và chia sẻ thì cuộc đời chẳng còn ý nghĩa gì.

Các đề tài tương tự

  1. Tham số, tham trị, tham biến. Ý nghĩa như thế nào trong lập trình C?
    Gửi bởi toend2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 28-08-2014, 10:24 AM
  2. Bài tập C Bài tập tính lãi ngân hàng dùng đệ quy hoặc tham chiếu, tham trị
    Gửi bởi thaohoangf trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 08-10-2012, 08:24 AM
  3. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  4. tại sao tham số phải là tham chiếu? (toán tử gán =)
    Gửi bởi tatyasurai trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 12-06-2011, 01:02 PM
  5. tham trị và tham chiếu trong C#
    Gửi bởi hunter1189 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 16
    Bài viết cuối: 03-04-2011, 11:03 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn