C# - 将'object'参数转换为该对象的类型?

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)

你获得了几件事:

  1. 您只能调用Move(ICanMove objectThatMoves)实现该接口的对象.如果您尝试传递其他对象,则程序将无法编译.
  2. 你失去了条件陈述.如果您决定将Dog哪个实现添加ICanMove到您的程序,Move方法将无需任何修改即可正常工作.在您的版本中,您将不得不更改方法.

想象一下,如果你is的程序中有声明,你会有多少工作?


Yog*_*esh 9

好吧,你可以使用这样的is关键字:

if(objectToMove is Cat)
{
    ...
}
else if(objectToMove is Pigeon)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)