Làm thế nào tôi có thể thêm biến và phương thức thành viên vào một lớp dựng sẵn (NSString) mà không cần phân lớp nó.cách thêm biến thành viên và phương thức vào lớp dựng sẵn mà không cần phân lớp nó
Trả lời
"Danh mục" cho phép bạn thêm phương pháp chứ không phải biến thành viên, cho các lớp hiện có.
Xem phần hướng dẫn này trên chúng (tìm kiếm trong trang): http://cocoadevcentral.com/d/learn_objectivec/ Hoặc tra cứu Danh mục trong tài liệu Mục tiêu-C ở bất kỳ nơi nào khác.
Bạn không thể thêm vars mẫu mà không có phân lớp phụ.
Bạn có thể thêm một cái gì đó giống như các biến mẫu thông qua các tham chiếu liên kết (như Laurent trỏ tới). – bbum
Bạn có thể thêm các phương thức thành viên vào một lớp không có phân lớp bằng cách tạo danh mục, nhưng điều này sẽ không cho phép bạn thêm các biến thành viên.
Mặc dù rất nhiều thứ có thể được thực hiện khi chạy trong mục tiêu-c không thể thực hiện bằng các ngôn ngữ khác (xem runtime reference) Tôi thực sự không đề xuất nhiều hackery này để thêm biến mẫu vào lớp hiện có.
Bạn có thể giải thích lý do bạn không muốn phân lớp không? Một phân lớp hoặc thể loại thực sự có vẻ như là điều tốt nhất để làm.
Đối với các phương pháp: bạn có thể sử dụng categories để thêm các phương thức thành viên mà không cần phân lớp phụ. Đó là một thực tế khá phổ biến trong Cocoa, để thêm phương pháp mở rộng cho mỗi khung công tác.
Đối với các biến mẫu: bắt đầu bằng Snow Leopard (Mac OS X 10.6), bạn có thể sử dụng associative references. Bạn sử dụng chúng để mô phỏng việc bổ sung các biến đối tượng cho một lớp hiện có.
Objective-C Programming Language là khá toàn diện về những gì bạn có thể làm với cả hai tham chiếu và danh mục liên kết.
Bạn không thể. Đôi khi nó là một ý tưởng tồi để phân lớp (có thể bạn đang làm việc với một cụm lớp, ví dụ), vì vậy mọi người thường làm việc xung quanh điều này bằng cách tạo ra một lớp mới (một lớp con của NSObject, không phải của lớp được đề cập). biến thể hiện có loại là lớp được đề cập, cũng như các biến được thêm vào mong muốn.
Ví dụ, nếu bạn muốn tạo ra một lớp con của NSString với một BOOL bổ sung được gọi "foo" ...
@interface StringWithFoo : NSObject
{
NSString* string;
BOOL foo;
}
... và sau đó thực hiện bất kỳ phương pháp bạn cần, hoặc tạo ra một accessor công cộng vì vậy bạn có thể gọi các phương thức trên chuỗi trực tiếp hoặc thậm chí sử dụng thủ thuật thời gian chạy ưa thích để chuyển tiếp thư một cách thích hợp (hỏi một câu hỏi mới nếu đó là những gì bạn muốn làm).
Đây là một ví dụ về decorator pattern.
- 1. Nhận tên lớp Ruby mà không cần phương thức lớp
- 2. Mục tiêu-C, biến thành viên và biến lớp
- 3. Thêm phương thức vào một lớp miền
- 4. Cách thêm phương thức vào lớp hiện có trong PHP?
- 5. Tiền tố biến thành viên được thêm nhầm vào tên phương thức
- 6. Lớp thành viên tĩnh - khai báo lớp riêng tư và lớp thành viên riêng tư?
- 7. Tạo Marker mà không cần thêm nó vào bản đồ?
- 8. Chuyên môn thành viên của lớp mẫu mà không cần khai báo trong tiêu đề
- 9. Thêm phương thức đảm bảo cho lớp hiện tại (Loại trừ diễn viên lớp học)
- 10. Truy cập vào một thành viên/phương thức của lớp dẫn xuất ảo
- 11. Thêm cùng một phương thức vào nhiều lớp
- 12. thêm phương thức vào một lớp động với trang trí
- 13. Thêm phương thức mở rộng vào lớp chuỗi - C#
- 14. Chia sẻ các biến giữa các lớp và phương thức
- 15. Gọi một phương thức phân lớp từ siêu lớp
- 16. AS3: gọi phương thức lớp tĩnh - tên lớp và phương thức là các chuỗi
- 17. Lớp Singleton so với lớp có thành viên tĩnh
- 18. Việc khai báo một phương thức trung bình của lớp Java có nghĩa là các phương thức mà nó gọi trong các lớp khác cũng là strictfp không?
- 19. Groovy thêm các phương thức mới vào các lớp Java như thế nào?
- 20. Các thành viên lớp tĩnh python
- 21. Phương thức gọi Python mà không cần 'tự'
- 22. Làm cách nào để gọi các biến thành viên của một lớp trong một phương thức tĩnh?
- 23. concatenating C++ iterator dao vào một biến thành viên vector const lúc xây dựng
- 24. Cách tự động thêm phương thức lớp học?
- 25. Cách lấy danh sách đối số của hàm dựng sẵn lớp Python được xây dựng sẵn?
- 26. C++ Có đúng không khi gọi các biến thành viên lớp là "thuộc tính"?
- 27. mẫu: các biến thành viên lớp cha không hiển thị trong lớp
- 28. C# Ghi đè biến thành viên được sử dụng bởi phương pháp lớp cơ sở
- 29. Gọi phương thức thành viên không tĩnh từ phương thức khác
- 30. C++ thêm phương thức vào lớp được xác định trong tệp tiêu đề
Chúng được gọi là các biến * instance * trong Mục tiêu C. –