Một sự khác biệt lớn là
Student s1 = new Student();
sẽ không biên dịch nếu không có constructor mặc định trên Student
, trong khi
Student s1 = Activator.CreateInstance<Student>();
sẽ biên dịch ngay cả khi Student
làm không có hàm tạo mặc định. (Nó sẽ biên dịch, và cho phép bạn chạy chương trình, nhưng nếu không có hàm tạo nào phù hợp, bạn sẽ nhận được một ngoại lệ, trong khi hàm khởi tạo sẽ không biên dịch nếu hàm tạo không tồn tại.)
Tương tự, gọi CreateInstance
là một sử dụng tiềm ẩn của lớp, vì vậy, ví dụ, Resharper sẽ không biết rằng bạn đang instantiating nó, và có thể cho bạn biết rằng lớp học là không bao giờ instantiated.
Như đã đề cập trong câu trả lời khác, cuộc gọi CreateInstance
cũng cho phép việc sử dụng một tham số kiểu chung chung:
T s1 = Activator.CreateInstance<T>();
dù bạn có lẽ sẽ tốt hơn bằng cách sử dụng một new
loại hạn chế, vì nó sẽ cung cấp cho bạn biên dịch -giảm bảo rằng thực sự có một nhà xây dựng được gọi.
Quá tải Activator.CreateInstance(Type, ...)
hữu ích hơn nhiều.
Nguồn
2014-03-31 23:24:45
Related: http://stackoverflow.com/questions/6582259/fast-creation-of-objects-instead-of-activator-createinstancetype, http://stackoverflow.com/questions/6069661/does-system-activator -createinstancet-have-performance-issues-big-đủ-to-di – nawfal