Sử dụng mẫu động có lẽ? Bạn có thể gọi bất kỳ phương thức/thuộc tính nào bằng cách sử dụng từ khóa động, phải không? Làm thế nào để kiểm tra xem phương pháp tồn tại trước khi gọi myDynamicObject.DoStuff(), ví dụ?Cách kiểm tra xem một đối tượng có phương pháp/thuộc tính nhất định không?
Trả lời
Bạn có thể viết một cái gì đó như thế:
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
Edit: bạn thậm chí có thể làm một phương pháp mở rộng và sử dụng nó như
nàymyObject.HasMethod("SomeMethod");
Sẽ tốt hơn nếu bạn không sử dụng bất kỳ loại động nào cho điều này và để cho lớp của bạn triển khai giao diện. Sau đó, bạn có thể kiểm tra tại thời điểm chạy một đối tượng thực hiện giao diện đó, và do đó, có phương thức dự kiến (hoặc thuộc tính).
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if(x != null)
{
x.Somemethod();
}
Tôi nghĩ đây là cách chính xác duy nhất. Điều bạn đang đề cập đến là gõ vịt, điều này rất hữu ích trong các tình huống mà bạn đã biết rằng đối tượng có phương thức, nhưng trình biên dịch không thể kiểm tra điều đó. Điều này rất hữu ích trong các trường hợp COM interop chẳng hạn. (kiểm tra this bài viết)
Nếu bạn muốn kết hợp kiểu gõ vịt với sự phản chiếu chẳng hạn, thì tôi nghĩ bạn đang thiếu mục tiêu gõ vịt.
nếu đối tượng có thể là đối tượng do .NET framework cung cấp và tôi không thể khai báo nó để triển khai bất kỳ thứ gì? –
Có vấn đề gì? Bạn có thể kiểm tra xem 'đối tượng' có phải là một đối tượng như vậy, được cung cấp bởi khuôn khổ .NET giống như cách –
chẳng hạn, bạn muốn kiểm tra xem có phương thức "Thêm" trong một đối tượng hay không. ANd đối tượng có thể là một Danh sách
qua Reflection
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
tương tự là cho các phương pháp
Tốt. Bạn cũng có thể làm GetMethod trong một vòng lặp để có được thuộc tính được xác định thích hợp. – Jnr
Đó là một câu hỏi cũ, nhưng tôi chỉ chạy vào nó. Type.GetMethod(string name)
sẽ ném một AmbiguousMatchException nếu có nhiều hơn một phương pháp với tên đó, vì vậy chúng ta nên xử lý trường hợp đó
public static bool HasMethod(this object objectToCheck, string methodName)
{
try
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
catch(AmbiguousMatchException)
{
// ambiguous means there is more than one result,
// which means: a method with that name does exist
return true;
}
}
- 1. Trong groovy, có cách nào để kiểm tra xem một đối tượng có một phương thức nhất định không?
- 2. Kiểm tra xem Danh sách đối tượng có chứa đối tượng có giá trị thuộc tính nhất định không
- 3. Cách kiểm tra xem đối tượng có phải là một mảng của một loại nhất định
- 4. kiểm tra xem std :: vector có chứa một đối tượng nhất định không?
- 5. Cách kiểm tra xem đối tượng có phải là một loại nhất định
- 6. Java: Cách kiểm tra xem đối tượng có rỗng không?
- 7. Cách xác minh xem một đối tượng có thuộc tính nhất định không?
- 8. Kiểm tra xem có phải là một đối tượng
- 9. Django cách kiểm tra xem đối tượng có thuộc tính trong chế độ xem
- 10. Cách kiểm tra xem NSArray có chứa đối tượng của một lớp cụ thể không?
- 11. Cách tốt nhất để kiểm tra xem đối tượng PowerShell có tồn tại không?
- 12. RSpec. Làm cách nào để kiểm tra xem phương thức đối tượng có được gọi không?
- 13. Cách kiểm tra nhiều thuộc tính của một đối tượng
- 14. cách tốt nhất để kiểm tra xem đối tượng S3 có tồn tại không?
- 15. Cách kiểm tra xem thuộc tính có ảo không?
- 16. Kiểm tra xem một đối tượng có tồn tại
- 17. Cách xác định xem đối tượng JavaScript gốc có thuộc tính/phương thức không?
- 18. python 3: cách kiểm tra xem đối tượng có phải là một hàm không?
- 19. Kiểm tra xem danh sách đỉnh có chứa đối tượng
- 20. Làm cách nào để kiểm tra xem một đối tượng trò chơi có thể nhìn thấy đối tượng khác không?
- 21. Cách tốt nhất để kiểm tra xem một đối tượng có phải là một mảng hay không trong Javascript?
- 22. Kiểm tra xem đối tượng có thực hiện giao diện
- 23. Đối tượng động - Cách xác định xem thuộc tính có được xác định không?
- 24. Cách hiệu quả nhất để kiểm tra loại đối tượng
- 25. jQuery: Cách tìm đối tượng có thuộc tính nhất định bằng một giá trị nhất định?
- 26. jQuery; Kiểm tra xem đối tượng có con $ (điều này)
- 27. Mongoose: kiểm tra xem đối tượng có phải là đối tượng mongoose
- 28. Cách kiểm tra xem 2 đối tượng DirectoryInfo có trỏ đến cùng một thư mục không?
- 29. Làm cách nào để kiểm tra xem một đối tượng có được phát hành không?
- 30. Kiểm tra xem một đối tượng là một Enum
loại * myDynamicObject * là gì? Nó có phải là một lớp bắt nguồn từ 'DynamicObject'? –
điều gì đó được khai báo với từ khóa động –