C#中的动态强制转换

Oct*_*314 1 c# casting

我有一个名为Rack的抽象基类,我有不同类型的机架,它们是Rack的子机.我希望能够将通用C#对象动态地转换为Rack类的不同子类,以便调用所有子进程作为方法的正确getData方法.这是我到目前为止所拥有的.
下面的代码调用Rack基类中的虚方法.我需要它来调用Rack的子类中的方法.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace IO_Interface
{
class Channel
{
    private object rack1;
    private object rack2;
    public Channel()
    {

    }

    public Channel(object h1, object h2)
    {
        rack1 = h1;
        rack2 = h2;
    }

    public void send()
    {

        Type rack1Info = rack1.GetType();
        Type rack2Info = rack2.GetType();
        string name = rack1.ToString();

        MethodInfo castMethod = rack1.GetType().GetMethod("getData").;
        castMethod.Invoke(rack1.GetType(), null);

    }

}
}`
Run Code Online (Sandbox Code Playgroud)

Nik*_*hil 5

你想要做的是将你的rack1和rack2声明为Racks,这将是一个带抽象方法GetData的抽象类.您将它们实例化为Rack的子类.然后,当你在Rack上调用GetData时,它会找到被覆盖的方法并调用它.这是一个例子.

abstract class Rack
{
   public abstract void GetData();
}

class ChildRack1 : Rack
{
    public override void GetData(){}
}

class ChildRack2 : Rack
{
    public override void GetData(){}
}

class Channel
{
    private Rack rack1;
    private Rack rack2;
    public Channel()
    {

    }

    public Channel(Rack h1, Rack  h2)
    {
        rack1 = h1;
        rack2 = h2;
    }

    public void send()
    {

        rack1.GetData();
    }

}
Run Code Online (Sandbox Code Playgroud)