Tôi hiện đang có loại mã:C#: Đúc các loại động
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
if (MainObject is SomeClassType1)
{
SomeClassType1 HelpObject = (SomeClassType1)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
else if (MainObject is SomeClassType2)
{
SomeClassType2 HelpObject = (SomeClassType2)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
}
Giả sử rằng SomeClassType1 và SomeClassType2 có cùng một bộ tài sản mà tôi muốn gán (mặc dù họ có thể khác nhau ở những người khác), là có thể tự động cast MainObject vào loại thích hợp và sau đó gán giá trị, mà không sao chép mã? Đây là những gì tôi muốn nhìn thấy cuối cùng:
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
Type DynamicType = null;
if (MainObject is SomeClassType1)
{
DynamicType = typeof(SomeClassType1);
}
else if (MainObject is SomeClassType2)
{
DynamicType = typeof(SomeClassType2);
}
DynamicType HelpObject = (DynamicType)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
Và rõ ràng là C# phàn nàn về việc không thể tìm DynamicType:
Loại hoặc namespace tên 'DynamicType' không thể tìm được (bạn có thiếu chỉ thị sử dụng hoặc tham chiếu lắp ráp không?)
Có điều gì giống như vậy trong C# 2.0 không? Nếu nó lộn xộn hơn mã hiện tại của tôi, hơn là tôi không thấy điểm nào trong việc này, nhưng tôi rất muốn tìm hiểu. Cảm ơn!
EDIT: Chỉ cần làm rõ, tôi hoàn toàn hiểu rằng việc triển khai giao diện là giải pháp thích hợp nhất và có thể đúng. Điều đó nói rằng, tôi quan tâm nhiều hơn đến việc xem làm thế nào để tôi có thể làm điều đó mà không cần thực hiện một giao diện. Cảm ơn bạn đã trả lời tuyệt vời!
+1 Nice ... Tôi sẽ không nghĩ đến việc sử dụng Generics, tôi sẽ chỉ cast vào giao diện. –
Thông số chung T hữu ích ở đây như thế nào? Tại sao không chỉ đơn giản là sử dụng FillObject (IMyInterface mainobject, ...)? –
Tôi tò mò - tại sao bạn sử dụng generics trong trường hợp này và không chỉ riêng void FillObject (IMyInterface MainObject, Foo Arg1, Bar Arg2)? –