div*_*nci 5 c# reflection refactoring
C#
大家好,
我将一个对象传递给一个方法.
我想将该对象强制转换为特定的类,以便我可以执行自己的特定方法吗?我怎样才能做到这一点?
Move( new Cat() );
Move( new Pigeon() );
public void Move(object objectToMove)
{
if(objectToMove== Cat)
{
Cat catObject = objectToMove as Cat;
catObject.Walk();
}
else if(objectToMove== Pigeon)
{
Rat pigeonObject = objectToMove as Pigeon;
pigeonObject.Fly();
}
}
Run Code Online (Sandbox Code Playgroud)
Gro*_*roo 25
正确的方法是:
public interface ICanMove
{
void Move();
}
Run Code Online (Sandbox Code Playgroud)
由Cat和Pigeon实施:
public class Cat : ICanMove
{
public void Move() { /* do something */ }
}
public class Pigeon : ICanMove
{
public void Move() { /* do something */ }
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
public void Move(ICanMove objectThatMoves)
{
objectThatMoves.Move();
}
Run Code Online (Sandbox Code Playgroud)
你获得了几件事:
Move(ICanMove objectThatMoves)实现该接口的对象.如果您尝试传递其他对象,则程序将无法编译.Dog哪个实现添加ICanMove到您的程序,Move方法将无需任何修改即可正常工作.在您的版本中,您将不得不更改方法.想象一下,如果你is的程序中有声明,你会有多少工作?
好吧,你可以使用这样的is关键字:
if(objectToMove is Cat)
{
...
}
else if(objectToMove is Pigeon)
{
...
}
Run Code Online (Sandbox Code Playgroud)