Tôi có hai giao diện:
giao diện công cộng IController
{
void doSomething(IEntity thing);
}
giao diện công cộng IEntity { ... }
Một ví dụ thực hiện là:
lớp công khai ControllerImplA : IController
{
public void doSomething(Thực thể IEntity)
{
EntityImplA thực thểForA = (EntityImplA)thực thể;
...
}
}
lớp công khai EntityImplA : IEntity { ... }
ControllerImplA.doSomething()
củathực thể
Các thông số sẽ luônThực thểImplA
. như nhau,ControllerImplB.doSomething()
của thực thể
Các thông số sẽ luôn Thực thểImplB
, v.v. cho các triển khai khác.
Có cách nào để tránh sử dụng downcasting trong mã hiện tại của tôi không? Nói cách khác, tôi muốn làm một cái gì đó như thế này:
lớp công khai ControllerImplA : IController
{
public void doS Something(EntityImplA thực thể) { ... }
}
Không sửa đổi giao diện? Điều gì sẽ xảy ra nếu chúng ta sử dụng lớp cha trừu tượng thay vì giao diện?
Bạn muốn sử dụng thuốc generic. Sửa đổi giao diện là cách duy nhất để làm cho nó sạch sẽ:
giao diện công cộng IController trong đó T : IEntity
{
void doSomething(T thing);
}
Sau đó:
lớp công khai ControllerImplA : IController
{
public void doS Something(thực thể EntityImplA)
{
...
}
}
Tuy nhiên, nếu bạn thực sự không thể thay đổi giao diện, chẳng hạn như nếu nó được cung cấp bởi thư viện bên thứ ba, thì cách giải quyết của @dasblinkenlight sẽ rõ ràng như bạn sắp nhận được.
Tôi là một lập trình viên xuất sắc, rất giỏi!