2012-06-27 44 views
19

Tôi có một lớp bậc trên, chúng tôi có thể gọi class A và một vài lớp con, ví dụ: class a1 : A, class a2 : A, ... và a6 : A. Trong số class B của tôi, tôi có một bộ phương pháp tạo và thêm một trong các lớp con vào một số List<A> trong B.C# tạo Object obj = new T()?

Tôi muốn rút ngắn mã của mình hiện tại. Vì vậy, thay vì viết

Adda1() 
{ 
    aList.Add(new a1()); 
} 

Adda2() 
{ 
    aList.Add(new a2()); 
} 

... 

Adda6() 
{ 
    aList.Add(new a6()); 
} 

Thay vào đó tôi muốn viết một cái gì đó tương tự như sau

Add<T>() 
{ 
    aList.Add(new T()); // This gives an error saying there is no class T. 
} 

Là có thể?

Bạn cũng có thể hạn chế rằng T phải thuộc loại A hoặc một trong các lớp con của nó?

+0

thể trùng lặp của [Tạo thể hiện của loại chung chung?] (Http://stackoverflow.com/questions/731452/create-instance- of-generic-type) –

Trả lời

32

Câu trả lời của Lee là chính xác.

Lý do là để có thể gọi new T() bạn cần phải thêm một hạn chế new() để tham số kiểu của bạn:

void Add<T>() where T : new() 
{ 
    ... new T() ... 
} 

Bạn cũng cần một chế T : A để bạn có thể thêm đối tượng của bạn thuộc loại T đến List<A>.

Lưu ý: Khi bạn sử dụng new() cùng với contraints khác, new() hạn chế phải đi cuối cùng.

liên quan

+0

Cảm ơn bạn. Điều này có nghĩa là tôi có thể vượt qua lớp 'A' như một ràng buộc kiểu. Có cách nào mà tôi có thể làm cho nó chỉ có thể vượt qua các lớp con của 'A' như một ràng buộc? – sehlstrom

+0

@sehlstrom: Không, nhưng bạn có thể kiểm tra thời gian chạy nếu bạn muốn và ném một ngoại lệ nếu ai đó vượt qua một đối tượng kiểu 'A'. Bạn cũng có thể muốn xem xét việc tạo ra 'A' abstract. –

+0

Greate! Vì vậy, nếu 'A' là trừu tượng, tôi không thể vượt qua nó? Hoặc tôi có thể vượt qua nó, nhưng tôi sẽ không thể tạo một thể hiện? – sehlstrom

26
public void Add<T>() where T : A, new() 
{ 
    aList.Add(new T()); 
} 
+0

Để biết thêm thông tin, hãy kiểm tra http: // msdn .microsoft.com/vi-us/library/twcad0zb. – SirPentor

+0

Cảm ơn, đã lưu trong ngày! – idok

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