Hãy xem xét các lớp sau:
hạng công cộng Người
{
Tên chuỗi công khai;
Chuỗi công khai Họ;
ngày giờ công khai DateOfBirth;
loại nhân viên công cộng PersonType;
}
Và 2 phương thức và lệnh gọi phương thức sau:
public void DoS SomethingWithPersonType(Người người)
{
TestMethod(person.PersonType);
}
(Phụ thuộc vào DoS SomethingWithPersonType(người);
gọi)
khoảng trống công khai DoS SomethingWithPersonType(StaffType PersonType)
{
Phương thức kiểm tra(personType)
}
(Phụ thuộc vào DoSomethingPersonType(person.PersonType);
gọi).
Phương pháp nào hiệu quả hơn? Có phải tất cả họ đều "làm việc hiệu quả" như nhau? Nó không tạo ra sự khác biệt nào vì nó vừa được chuyển qua một tham chiếu? Hoặc tham chiếu được truyền có khác biệt theo một cách nào đó không?
Lý do tôi hỏi là vì tôi đã chọn chữ ký phương thức đầu tiên trong dự án hiện tại của mình - tôi đã làm điều này vì sau này chúng ta có thể cần sử dụng các trường khác của "người" của mình - vì vậy các phương pháp có thể mở rộng/thích ứng dễ dàng hơn là những gì tôi có - nhưng đó có phải là phương pháp đắt tiền hơn không?
EDIT: LƯU Ý - Không cần phải nói rằng những khác biệt này sẽ không đáng kể, nếu không, tôi đã gặp phải các tình huống trong đó tác động đến hiệu suất đủ đáng chú ý để tôi phải hành động. Đây chỉ là vì tò mò thôi.
Hiệu suất khôn ngoan chúng giống hệt nhau. Trong cả hai trường hợp, bạn chuyển một tham chiếu (với cùng chi phí hiệu suất) và trong cả hai trường hợp, bạn nhận được nó từ một trong các trường Loại người
sự vật.
Sự khác biệt duy nhất ở đây là về khả năng đọc/bảo trì mã, v.v. Nói chung, tốt nhất là các phương pháp chỉ chấp nhận thông tin chúng cần. nếu bạn chỉ cần Loại người
, thì chỉ chấp nhận Loại người
. Nó cho phép linh hoạt hơn trong việc sử dụng phương pháp. (nếu không Person
Có những thứ Loại người
phải làm gì? ) Nếu bạn nghĩ rằng bạn thực sự cần nhiều hơn chỉ là kiểu người thay vì chấp nhận Person
có thể thích hợp.
Cũng lưu ý rằng ngay cả khi có sự khác biệt ở đây thì chắc chắn nó cũng rất nhỏ. Bạn không nên xem xét từng ý tưởng nhỏ dựa trên chi phí vận hành. Máy tính ngày nay rất nhanh. Ngay cả các thuật toán tồi cũng có xu hướng mất rất ít thời gian để chạy trong thực tế (từ góc độ con người). Nếu chương trình của bạn chạy lâu hơn mức cần thiết thì đã đến lúc bắt đầu tìm kiếm những cải tiến. Bạn nên tập trung vào những vùng mã (được xác định bằng cách sử dụng trình lược tả) chiếm phần lớn thời gian của bộ xử lý. Giao tiếp mạng (bao gồm các cuộc gọi cơ sở dữ liệu) và IO khác thường là mục tiêu tốt để tối ưu hóa.
Cũng lưu ý rằng việc có các trường công khai thường được coi là thông lệ không tốt. Ít nhất, bạn có lẽ nên có tài sản công cộng.
Tôi là một lập trình viên xuất sắc, rất giỏi!