2013-03-16 74 views
19

Tôi không biết điều tôi đang yêu cầu là có sẵn hay không nhưng tôi chỉ muốn biết nếu nó tồn tại và làm thế nào nó hoạt động. Vì vậy, đây là câu hỏi của tôi:Tạo đối tượng của một lớp có tên của nó trong biến chuỗi

Tôi có 2-3 lớp mô hình tùy chỉnh của riêng mình. Ví dụ: Khách hàng, Nhân viên và sản phẩm. Bây giờ tôi có tên lớp trong một chuỗi. và dựa trên tên lớp đến trong một chuỗi, tôi phải tạo đối tượng của nó và quay lại chế độ xem. Làm thế nào tôi có thể đạt được điều này?

Tôi biết một lựa chọn của IF ELSE tuyên bố nhưng tôi muốn thử một tốt hơn, "động" cách ...

+0

gì bạn đang tìm kiếm là phản chiếu, nhưng như một quy luật chung, nếu bạn đang sử dụng phản chiếu, bạn có thể làm điều gì đó sai (có trường hợp bạn cần phản ánh, nhưng nó không phổ biến). –

Trả lời

39

Có tên lớp trong chuỗi là không đủ để có thể tạo ra cá thể của nó. Như một vấn đề của thực tế, bạn sẽ cần không gian tên đầy đủ bao gồm cả tên lớp để tạo ra một đối tượng.

Giả sử bạn có những điều sau đây:

string className = "MyClass"; 
string namespaceName = "MyNamespace.MyInternalNamespace"; 

Hơn bạn bạn có thể tạo một thể hiện của lớp đó, các đối tượng của lớp MyNamespace.MyInternalNamespace.MyClass bằng cách sử dụng các kỹ thuật sau:

var myObj = Activator.CreateInstance(namespaceName, className); 

hay này:

var myObj = Activator.CreateInstance(Type.GetType(namespaceName + "." + className)); 

Hy vọng điều này sẽ giúp, vui lòng cho tôi biết nếu không.

+0

Tôi có tên lớp trong một chuỗi. vì vậy về cơ bản tôi dnt knw loại lớp. Sau đó, làm thế nào tôi có thể tạo đối tượng của lớp học cụ thể. Trong "MyClass myObj =" Tôi phải đưa cho MyClass. bt có thể là bất kỳ lớp nào. – Dhwani

+0

Tôi đã làm chính xác những gì bạn đang cố gắng làm. Như tôi đã đề cập Bên cạnh tên lớp bạn cần không gian tên (như một chuỗi). Có cả hai, bạn có thể tạo thể hiện của đối tượng của lớp đó theo cách tôi đã trình bày. Tôi sẽ chỉnh sửa câu trả lời để làm rõ. Cảm ơn vì đã chào hỏi –

+4

Chẳng phải mã cuối cùng nên đọc: "var myObj = Activator.CreateInstance (Type.GetType (namespaceName +". "+ ClassName));" (thiếu dấu chấm?) – JCCyC

2

cách dễ nhất là sử dụng Activator. Chuyển tên lớp thành GetType và Tạo phiên bản mới.

ClassInstance s1 = (ClassInstance)Activator.CreateInstance(Type.GetType("App.ClassInstance"));

public class ClassInstance 
{ 
    public string StringData { get; set; } 
} 

Kính trọng, Nik

8
string frmName = "frmCustomer"; 
    //WorldCarUI. is the namespace of the form 
    Type CAType = Type.GetType("WorldCarUI." + frmName); 
    var myObj = Activator.CreateInstance(CAType); 
    Form nextForm2 = (Form)myObj; 
    nextForm2.Show(); 

này làm công trình ..

Trân Avi

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