2011-04-06 40 views
10

Trong C#, làm cách nào để tìm hiểu xem có thể khởi tạo Type không? Tôi đang cố tránh một ngoại lệ Activator.CreateInstance.Tìm hiểu xem loại có thể ngay lập tức

Phương pháp hiện tại của tôi là type.IsClass && !type.IsInterface, nhưng tôi lo ngại điều này có thể không thành công trên các lớp trừu tượng, v.v. Tôi cũng xem xét việc kiểm tra type.TypeInitializer == null, nhưng tôi không chắc chắn điều đó có dễ dàng hay không.

Cách đơn giản nhất/hiệu quả nhất có thể tìm hiểu xem liệu Type có thể diễn ra nhanh không?

+4

Có 'loại.IsAbstract'. –

+1

Để nó được "an toàn", anh ta cũng sẽ không phải kiểm tra IsPublic và các thuộc tính tương tự trên đối tượng ConstructorInfo được trả về bởi GetConstructor(). Tôi không biết. Tôi đang yêu cầu .. –

Trả lời

7

Có nhiều bẫy khác. Nó có thể có một hàm tạo riêng tư hoặc được bảo vệ. Hoặc nó có thể không có một hàm tạo mặc định, chỉ các hàm tạo có các kiểu đối số nhất định. Nếu bạn phải lo lắng về điều đó thì bạn chắc chắn đang sử dụng Activator.CreateInstance() khi nó không nên được sử dụng. Chỉ cần tùy ý xây dựng các đối tượng chỉ có thể tạo ra tàn phá, bạn không có ý tưởng loại tác dụng phụ mà họ có thể có. Tránh lớp "FormatDisk".

Một ngoại lệ là bạn của bạn, nó cho bạn biết rằng giả định của bạn là sai. Không bao giờ cố ý ngăn chặn .NET framework trở nên hữu ích.

+0

Tôi đang tạo ra các trường hợp triển khai giao diện, vì vậy tôi biết điều gì đó về chúng. Tôi đánh giá cao cảnh báo, mặc dù. – user664939

+0

Tuyệt vời, sau đó bạn không cần phải lo lắng về ngoại lệ hoặc vô tình tạo ra một lớp trừu tượng. Một cái tên nổi tiếng đơn giản được hoàn thành công việc. –

+0

Làm cách nào để tôi kiểm tra một hàm tạo mặc định? – user664939

Các vấn đề liên quan