Tôi đang sử dụng LINQ-to-XML để truy vấn một tệp cho danh sách đối tượng. Tất cả chúng đều có cùng một cấu trúc (một số tùy chọn, một danh sách các tham số của độ dài không xác định). Dựa trên tên của họ trong tệp XML, tôi muốn sử dụng các tham số cho những thứ hoàn toàn khác nhau - vì vậy tôi đã tạo các lớp con của đối tượng này.Làm thế nào tôi có thể tự động gọi một hàm tạo trong C#?
Câu hỏi của tôi là - làm cách nào để tôi tự động gọi hàm tạo đúng, mà không làm điều gì đó giống như tuyên bố trường hợp? Hay giải pháp để tạo ra các lớp con khác nhau một cách tao nhã từ XML nằm ở nơi khác?
class Object1
{
string name;
OptionObj opt;
List<Param> parameters;
}
class sonOfObject : Object1
{
public void ExecuteSomething()
{
//do something with the parameters
}
}
class secondSonOfObject : Object1
{
public void ExecuteSomething()
{
//do something entirely different with the parameters
}
}
var query = from x in xmlDoc.Descendants("Object")
select new Object
{
//select the object from the XML
}
Sau bit bit này, tôi có thể sử dụng hàm tạo bản sao để tạo một sonOfObject từ đối tượng truy vấn chung chung hơn. Nhưng làm thế nào để tôi làm điều đó một cách năng động, dựa trên tên của lớp trẻ?
Tôi biết rằng bạn có thể nhận MethodInfo từ một loại và gọi nó ala ...
MethodInfo m = t.GetMethod(someName);
m.Invoke(yourObj, null);
Nhưng điều đó có nghĩa là tôi sẽ phải nhanh chóng 9 hoặc 10 của các đối tượng lớp con (và nhận được các loại cho mỗi người trong số họ), và vẫn kết thúc trong một số loại tuyên bố trường hợp.
Có cách nào thanh lịch hơn để gọi các nhà xây dựng lớp trẻ không?
+1 Sau khi đọc lại OP Tôi tin rằng đây thực sự là giải pháp tốt hơn. –