- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们正在讨论为实体类定义方法的最佳方式 - 作为扩展方法或使用分部类。我们讨论的这类方法不会修改实体的状态,它们是纯粹的“辅助”方法,可以查询状态并返回值。
这两种方法的主要好处是保持实体类干净,同时仍然为客户端代码提供智能感知支持。
我对这两种方式都没有强烈的偏好,但很想知道其他人是否对其中一种有偏好(或知道记录的指南)。
我开始为我能想到的每种方法写下优点列表,但最后我想到的是:
部分类
方法定义位于类中(即使它是另一个文件),因此支持“查找方法”的 Visual Studio 工具(例如 resharper 中的 ALT-\)将定位该方法
由于使用了 partial 关键字,一旦实体类被打开,包含辅助方法的其他文件的存在就很明显
扩展方法
其他人可以对此发表意见吗?
PS 我不认为这是以下问题的重复,因为该问题的提问者满足于将概述功能差异的回复标记为正确答案,但未回答有关哪种方法的问题是这种情况下的最佳做法: Partial Class vs Extension Method
编辑 - 我正在寻找人们对一种方法或另一种方法的偏好,因为我们找不到针对这种特定情况的文档化指南。这两种方法都是可能的,并且都不违反任何设计原则,所以这是一个偏好问题,我想知道你的。
câu trả lời hay nhất
在我看来,扩展方法有两个好处。首先,当你将它们应用到接口(interface)上时,会给你一种写抽象基类的错觉,让你定义一些常用的方法,但它更灵活,因为一个类只能有一个基类,但可以实现多个接口(interface)。其次,如果你将它应用到常规类(class)中,那么我倾向于将其视为某种黑客攻击。当原始类缺少一些方法时,你真的觉得他们应该有这些方法,但他们没有,而且你也够不到,所以你不得不在其他地方实现它们,作为实用方法,它给出了你错觉它真的在那里。
这两种情况最终都只是语法糖,但扩展接口(interface)对我来说更有意义,例如,如果我只看 LINQ 的 Enumerable 类。我已经在几十个完全不同的类上使用了这些扩展方法,所以它确实得到了返回。类扩展方法的一个示例是在将其添加到框架之前创建自己的 string.IsNullOrWhitespace。
扩展接口(interface)似乎是正确的,因为接口(interface)定义了一个契约,你可以在你的扩展方法中依赖那个契约,但是当你扩展一个常规类时,它可能会改变并破坏你的扩展方法。当然,界面也可能会发生变化,但我认为它们往往设计得更彻底,但我没有任何统计数据。
然后是面向对象编程的情况。你觉得你的方法应该去哪里,谁使用这些额外的方法,边界在哪里。如果你认为一个方法属于一个类,那么就把它放在类中。有道理,很简单。在发明扩展方法之前,人们编写了非常好的类,他们把一切都放在了它所属的地方,生活很美好,哈哈。
部分类很酷,因为它们不像扩展方法那么复杂。它们不是语法糖,也不是魔法。这只是处理自动生成类的最好和最简单的方法,所以我没有想太多。我已经编写了一些代码生成器,它们会发出人类可以编写自己的东西的区域,并且不会在后续代码生成中被覆盖。那样比较舒服,但仅此而已。我无法更改 .NET 工具生成代码的方式,它们也不会这样做,因此分部类是下一个最好的选择。
总而言之,我的观点是只在真正需要时才使用扩展方法,并尽可能使用分部类。
关于c# - 指南 - 扩展方法与部分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20279424/
Tôi muốn làm cho mã NSIS của mình dễ đọc hơn. Tôi cần một số hướng dẫn về cách viết các phần mã một cách khôn ngoan (chẳng hạn như có #khu vực #endkhu vực trong C#) hoặc bất kỳ thông tin nào có thể giúp việc viết mã NSIS trở nên thú vị và dễ dàng. Vui lòng giúp tôi.
Tôi đang cố gắng tìm ra tất cả cú pháp/định dạng có sẵn trong Gherkin, chẳng hạn như về các tham số nhiều dòng và mọi thứ khác mà tôi không biết. Sau khi tìm hiểu kỹ các kết quả tìm kiếm của Google, có vẻ như có một hướng dẫn toàn diện ở đây: Tôi nghĩ điều đó hay và nó được liên kết đến một trang
đóng cửa. Câu hỏi này không đáp ứng các nguyên tắc của Stack Overflow. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện vấn đề này? Câu hỏi được cập nhật để làm cho câu hỏi trở thành chủ đề cho Stack Overflow. Đóng cửa 5 năm trước. Cải thiện điều này
Khi tôi thêm hướng dẫn vào valueAxesSettings, nó không hoạt động ngay cả khi tôi chọn valueAxesSettings cho valueAxes. Ngoài ra, valueAxesSetting
Tôi đang tìm kiếm các gợi ý, lời khuyên hoặc thậm chí là truyền miệng về cách quản lý ba số phiên bản hợp ngữ khác nhau cho một hợp ngữ .NET. Phiên bản Sản phẩm là đơn giản nhất vì điều này dường như thường do doanh nghiệp quyết định. Các phiên bản tệp sau đó dường như được sử dụng để kiểm soát phiên bản giữa các lần triển khai, trong đó phiên bản thực tế
Có điều gì đó hiện lên trong đầu tôi đêm qua. Tôi đang tự hỏi tại sao chúng ta vẫn có những phong cách viết mã khác nhau giữa các dự án. Vì phong cách là một thứ mang tính cá nhân nên tôi nghĩ tốt nhất nên đối xử với nó như vậy. Tại sao chúng ta không? Có bất kỳ hạn chế kỹ thuật nào đối với điều này không? Hãy để tôi đưa ra một vài ví dụ: // Mã mẫu
Tôi có một ứng dụng mà người dùng có thể đăng nhập từ Hoạt động chính và sau đó có thể duyệt qua hệ thống phân cấp các thực thể bằng ListView. Do đó, ngăn xếp Hoạt động trông như thế này: A -> B -> B -> B -> .
đóng cửa. Câu hỏi này dựa trên ý kiến. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Cập nhật câu hỏi để việc chỉnh sửa bài đăng này có thể trả lời nó bằng các sự kiện và trích dẫn. Đã đóng 9 năm trước. Cải thiện
Xin chào mọi người, tôi bắt đầu học CSS vào tháng trước. Điều đầu tiên tôi làm là đọc mọi thứ tôi có thể tìm thấy trên www.w3school.com, sau đó tôi bắt đầu đọc CSS Mastery 2nd Edition. Tôi đã xây dựng một số trang web của riêng mình và đạt được
Tôi muốn người dùng có thể tải lên ảnh hồ sơ. Có hướng dẫn nào về cách tốt nhất để xử lý việc này không? Ví dụ - nơi lưu hình ảnh? và cấu trúc thư mục sẽ sử dụng. - Gây khó khăn cho người dùng khi duyệt ảnh hồ sơ của mọi người? Cảm ơn. Câu trả lời hay nhất nếu chính bạn
Tôi muốn tìm hiểu thêm về hệ thống khởi động lại có điều kiện và cách thức hoạt động của nó. Tôi không biết bắt đầu từ đâu. Tôi đã xem mã nguồn nhưng tự hỏi liệu có hướng dẫn cấp cao hơn không. Câu trả lời hay nhất Kent Pitman: Hệ thống điều kiện http://www.nhp
Tôi muốn kết hợp một trình phân tích cú pháp dựa trên C nhỏ gọn và tiện dụng vào dự án Android của mình. Trước đây tôi đã thực hiện lập trình JNI nhưng chưa thực hiện bất kỳ loại phát triển gốc (C) nào trên Android. Kế hoạch của tôi là đặt C lib
Tuyên bố miễn trừ trách nhiệm: Tôi đã thử tìm kiếm các câu hỏi tương tự nhưng nó trả về thông tin về mọi câu hỏi C++... Ngoài ra, tôi sẽ đánh giá cao bất kỳ ai có thể nghĩ ra tiêu đề hay hơn. Có hai cấu trúc vòng lặp nổi tiếng trong C++: while và for. Tôi cố tình bỏ qua do..
Tôi đã cố gắng xóa hàng loạt các liên kết spam khỏi các bài đăng WordPress như thế này: Chúng nằm trong bảng wp_posts bên dưới cột post_content. Tôi đã cố gắng thực hiện việc này bằng cách thêm ký tự đại diện % vào thẻ href
đóng cửa. Câu hỏi này dựa trên ý kiến. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Cập nhật câu hỏi để việc chỉnh sửa bài đăng này có thể trả lời nó bằng các sự kiện và trích dẫn. Đã đóng 6 năm trước. Cải thiện
Chúng ta đang thảo luận về cách tốt nhất để định nghĩa các phương thức cho các lớp thực thể - dưới dạng các phương thức mở rộng hoặc sử dụng các lớp một phần. Các loại phương thức mà chúng ta đang thảo luận không sửa đổi trạng thái của thực thể; chúng hoàn toàn là các phương thức "trợ giúp" truy vấn trạng thái và trả về một giá trị. Lợi ích chính của cả hai phương pháp là giữ cho lớp thực thể sạch sẽ trong khi
Bạn sẽ triển khai lớp bootstrap trên màn hình thực tế trong Flutter như thế nào. Giống như thế này: Câu trả lời hay nhất Điều này không tầm thường. Sau đây là các thành phần bắt buộc: Đầu tiên, bạn phải mở hộp thoại toàn màn hình trong suốt
Hầu hết các vấn đề tính toán khoa học mà chúng ta cần giải quyết bằng cách triển khai các thuật toán cụ thể trong C/C++ đều yêu cầu độ chính xác thấp hơn nhiều so với gấp đôi. Ví dụ: độ chính xác 1e-6, 1e-7 bao gồm 99% trường hợp bộ giải ODE hoặc tích phân số. Ngay cả khi chúng ta thực sự cần
Tôi đang xem xét hỗ trợ RTL cho khung giao diện người dùng độc quyền (dành cho ứng dụng dành cho máy tính để bàn) và tôi muốn biết: có hướng dẫn nào về cách thay đổi hiển thị tiện ích không? Tôi đang tìm kiếm một danh sách có các mục sau: nhãn hộp kiểm ở bên trái hộp kiểm và các nút thanh công cụ căn phải được sắp xếp từ phải sang trái
Như hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời sẽ được hỗ trợ bởi các sự kiện, trích dẫn hoặc kiến thức chuyên môn, nhưng câu hỏi có thể gây ra tranh luận, tranh luận, bỏ phiếu hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập trang
Tôi là một lập trình viên xuất sắc, rất giỏi!