Tôi đang trong tình huống mà tôi muốn khởi tạo một đối tượng thuộc loại sẽ được xác định khi chạy. Tôi cũng cần phải thực hiện một diễn viên rõ ràng cho loại đó.Khởi tạo một đối tượng với kiểu xác định thời gian chạy
Something như thế này:
static void castTest(myEnum val)
{
//Call a native function that returns a pointer to a structure
IntPtr = someNativeFunction(..params..);
//determine the type of the structure based on the enum value
Type structType = getTypeFromEnum(val);
structType myStruct = (structType)Marshal.PtrToStructure(IntPtr, structType);
}
này rõ ràng là không mã hợp lệ, nhưng tôi hy vọng nó truyền tải được bản chất của những gì tôi đang cố gắng làm. Phương pháp tôi đang thực sự làm việc trên sẽ phải thực hiện hoạt động marshaling trên ~ 35 loại khác nhau. Tôi có một số phương pháp khác mà sẽ cần phải làm một cái gì đó tương tự với cùng một tập hợp các loại. Vì vậy, tôi muốn tách biệt logic xác định loại từ các phương thức này để tôi chỉ cần viết nó một lần và để các phương thức luôn sạch sẽ và dễ đọc.
Tôi phải thừa nhận là một người mới làm quen với thiết kế. Bất cứ ai có thể đề xuất một cách tiếp cận tốt cho vấn đề này? Tôi nghi ngờ có thể có một mẫu thiết kế thích hợp mà tôi không biết.
lẽ http://msdn.microsoft.com/en- chúng tôi/thư viện/system.activator.aspx có thể giúp bạn?Nó thường hữu ích cho việc khởi tạo các đối tượng có kiểu mà bạn chỉ biết khi chạy. Nó có thể được thực hiện với Reflection thường xuyên nhưng nó có một chút fiddlier. Tôi không có ý tưởng về thiết kế của bạn mặc dù vậy tôi sẽ không trả lời. – Skurmedel
có thể trùng lặp của [Lấy một đối tượng mới từ một Loại] (http://stackoverflow.com/questions/752/get-a-new-object-instance-from-a-type) – nawfal